Maison > Questions et réponses > le corps du texte
J'ai un tableau de taxonomie avec différentes catégories de transactions. Chaque catégorie contient un certain nombre de transactions ainsi que leurs dates d'expiration. Je souhaite accéder uniquement aux transactions et à leurs catégories dont la date d'expiration n'a pas encore expiré, mais je rencontre un problème : si des transactions d'une certaine catégorie existent dans la plage de temps, toutes les transactions arriveront, qu'elles aient ou non expiré. ou non. Voici mon 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粉0424552502023-09-14 13:55:18
Lorsque vous utilisez with
pour charger une relation, vous pouvez passer des conditions supplémentaires pour indiquer à Eloquent quels enregistrements charger :
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);
La dernière version de Laravel inclut même une withWhereHas
méthode dédiée qui vérifie l'existence d'une relation tout en chargeant simultanément la relation, chargement basé sur les mêmes conditions :
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);
Toute option peut répondre à vos besoins.