Methode zum Ermitteln des Transaktionsablaufdatums in der zugehörigen Tabelle
P粉752812853
P粉752812853 2023-09-13 16:19:38
0
1
644

Ich habe eine Taxonomietabelle mit verschiedenen Transaktionskategorien. Jede Kategorie enthält eine Reihe von Transaktionen sowie deren Ablaufdaten. Ich möchte nur auf die Transaktionen und deren Kategorien zugreifen, deren Ablaufdatum noch nicht abgelaufen ist, aber ich stoße auf ein Problem, bei dem alle Transaktionen eintreffen, unabhängig davon, ob sie abgelaufen sind, wenn Transaktionen einer bestimmten Kategorie innerhalb des Zeitbereichs vorhanden sind oder nicht. Das ist mein Code:

$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

Antworte allen(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);

任何一种选项都可以满足你的需求。

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage