Méthode pour trouver la date d'expiration de la transaction dans la table associée
P粉752812853
P粉752812853 2023-09-13 16:19:38
0
1
648

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粉752812853
P粉752812853

répondre à tous(1)
P粉042455250

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.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal