0
votes

Comment afficher l'enregistrement unique le plus récent de Laravel en utilisant Eloquant

Comment puis-je afficher l'enregistrement unique le plus récent de Laravel à l'aide de Eloquant la solution que j'ai affichée ci-dessous indique que l'enregistrement le plus ancien de la base de données n'est pas le plus récent.

J'ai deux tables une table de paiements et une table de paiements. La table de paiements a les colonnes suivantes

  • id
  • montant
  • loyer_from
  • loyer_to

    La table des paiements a une relation nombreuses à une avec la table des locataires.

    dans ma page d'index Je souhaite afficher uniquement le dernier paiement par locataire (tenant_id)

    Dans mon contrôleur, j'ai xxx

    index.blade.php xxx

    Ce spectacle Le dernier enregistrement n'est pas le dernier. Comment puis-je afficher le dernier enregistrement de paiement pour chaque locataire - un seul enregistrement de paiement le plus récent par tenant_id


0 commentaires

3 Réponses :


0
votes

Vous pouvez faire une nouvelle relation intitulée «Dès-dépassement» en utilisant «Hasone» avec OrderbyDesc pour obtenir le dernier paiement ... XXX


0 commentaires

0
votes

Dernier () code> est une fonction qui commandera avec la colonne que vous fournissez en ordre décroissant.

 public function index()
         {
               $payments = Payment::groupBy('tenant_id')->get()->latest('id');
               return view('payments.index')->with('payments',$payments);
         }


4 commentaires

Cela donne une erreur. "Utilisation d'un identifiant constant non défini - supposé" ID "(cela lancera une erreur dans une version future de PHP)"


Enveloppez-le dans des citations Dernière ('ID') ou si vous avez une colonne TIMESTAMP à la fin de votre table, vous pouvez le laisser à Dernier () au lieu de Dernier (id) et il commandera par cette colonne par défaut.


Cela donne toujours une erreur "Méthode Illuminate \ Base de données \ Eloquent \ Collection :: Dernière n'existe pas." Qu'est-ce qui pourrait être la raison


Supprimer -> get () et cela devrait fonctionner. $ Paiements = Paiement :: Groupby ('Tenant_id') -> Dernière ('ID');



0
votes

Ce qui suit me donne la sortie dont j'avais besoin. Existe-t-il un moyen plus éloquent d'exprimer cette fonction.

    {
$payments = Payment::whereRaw('id IN (select MAX(id) FROM payments GROUP BY tenant_id)')->get();
return view('payments.index')->with('payments',$payments);}


0 commentaires