254 votes

Sélectionner la dernière rangée du tableau

Je voudrais récupérer le dernier fichier inséré dans ma table. Je sais que la méthode first() existe et vous fournit le premier fichier de la table mais je ne sais pas comment obtenir le dernier insert.

1voto

bloggidy Points 19

Si vous cherchez la ligne réelle que vous venez d'insérer avec Laravel 3 et 4 lorsque vous effectuez un save o create action sur un nouveau modèle comme :

$user->save();

-ou-

$user = User::create(array('email' => 'example@gmail.com'));

alors l'instance de modèle insérée sera renvoyée et pourra être utilisée pour d'autres actions telles que la redirection vers la page de profil de l'utilisateur qui vient d'être créé.

La recherche du dernier enregistrement inséré fonctionne sur les systèmes à faible volume, presque tout le temps, mais si vous avez plusieurs insertions en même temps, vous pouvez finir par interroger pour trouver le mauvais enregistrement. Cela peut vraiment devenir un problème dans un système transactionnel où plusieurs tables doivent être mises à jour.

1voto

D'une manière ou d'une autre, tout ce qui précède ne semble pas fonctionner pour moi dans Laravel 5.3, j'ai donc résolu mon propre problème en utilisant :

Model::where('user_id', '=', $user_id)->orderBy('created_at', 'desc')->get();

j'espère pouvoir payer la caution de quelqu'un.

1voto

mangonights Points 326

Sachez que last() , latest() ne sont pas déterministes si l'on recherche un enregistrement séquentiel ou événementiel/ordonné. Les derniers/récents enregistrements peuvent avoir exactement la même valeur. created_at l'horodatage, et ce que vous obtenez en retour n'est pas déterministe. Alors faites orderBy(id|foo)->first() . Les autres idées/suggestions sur la manière d'être déterministe sont les bienvenues.

0voto

wang xin Points 3

Si la table a un champ de date, cette( User::orderBy('created_at', 'desc')->first(); ) est la meilleure solution, je pense. Mais il n'y a pas de champ de date, Model ::orderBy('id', 'desc')->first()->id; est la meilleure solution, j'en suis sûr.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X