recherche

Maison  >  Questions et réponses  >  le corps du texte

Méthode pour trouver la date d'expiration de la transaction dans la table associée

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粉752812853P粉752812853438 Il y a quelques jours606

répondre à tous(1)je répondrai

  • P粉042455250

    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.

    répondre
    0
  • Annulerrépondre