尋找交易到期日的方法在關聯表中
P粉752812853
P粉752812853 2023-09-13 16:19:38
0
1
549

我有一個分類表,其中包含不同的交易類別。每個類別都包含許多交易以及它們的到期日。我想只訪問那些到期日尚未過期的交易和它們的類別,但我遇到了一個問題,即如果某個類別的交易在時間範圍內存在,那麼所有的交易都會到達,無論它們是否過期。這是我的程式碼:

$deals = DealCategory::where('name', '!=', '今日交易')
        ->whereRelation('deals','start_date', '<=', date('Y-m-d'))
        ->whereRelation('deals', 'expiry_date',">=", date('Y-m-d'))
        ->with('deals', 'deals.deal_images', 'deals.deal_products', 'deals.deal_products.product', 'deals.rating')->latest()->Paginate(12);
        return response()->json(['Deals' => $deals, 'Date' => Carbon::now(), 'status' => 'success'], 200);

P粉752812853
P粉752812853

全部回覆(1)
P粉042455250

當你使用with來載入關聯關係時,你可以傳遞額外的條件告訴Eloquent要載入哪些記錄:

DealCategory::where('name', '!=', 'Today Deal')
  ->whereRelation('deals','start_date', '<=', date('Y-m-d'))
  ->whereRelation('deals', 'expiry_date',">=", date('Y-m-d'))
  ->with(['deals' => function ($query) {
    $query->where('start_date', '<=', date('Y-m-d'));
    $query->where('expiry_date',">=", date('Y-m-d'));
    $query->with('deal_images', 'deal_products', 'deal_products.product', 'rating');
  }])
->latest()->Paginate(12);

最新版本的Laravel甚至包括了一個專門的withWhereHas方法,可以在同時載入關聯關係的同時檢查關係的存在性,基於相同的條件進行載入:

DealCategory::where('name', '!=', 'Today Deal')
  ->withWhereHas('deals', function ($query) {
    $query->where('start_date', '<=', date('Y-m-d'));
    $query->where('expiry_date',">=", date('Y-m-d'));
    $query->with('deal_images', 'deal_products', 'deal_products.product', 'rating');
  })
->latest()->Paginate(12);

任何一種選項都可以滿足你的需求。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!