web-dev-qa-db-fra.com

Sélectionner la dernière ligne de la table

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

99
Carlos Suñol

Vous aurez besoin de commander par le même champ que vous commandez maintenant, mais en décroissant . Par exemple, si vous avez un horodatage lorsque le téléchargement a été effectué appelé upload_time, vous feriez quelque chose comme ceci;

Pour Pre-Laravel 4

return DB::table('files')->order_by('upload_time', 'desc')->first();

À partir de Laravel à partir de 4 ans

return DB::table('files')->orderBy('upload_time', 'desc')->first();

Cela ordonnera les lignes dans la table des fichiers par heure de téléchargement, ordre décroissant , et prendra la première. Ce sera le dernier fichier téléchargé.

148
Joachim Isaksson

Vous n'avez jamais mentionné si vous utilisiez Eloquent, ORM par défaut de Laravel ou non. Dans ce cas, supposons que vous souhaitiez obtenir la dernière entrée d'une table User, par created_at, vous pourriez probablement procéder comme suit:

User::orderBy('created_at', 'desc')->first();

D'abord, il classe les utilisateurs par le champ created_at, par ordre décroissant, puis prend le premier enregistrement du résultat.

Cela vous retournera une instance de l'objet User, pas une collection. Bien sûr, pour utiliser cette alternative, vous devez avoir un modèle User, qui étend la classe Eloquent. Cela peut sembler un peu déroutant, mais il est très facile de se lancer et ORM peut être très utile.

Pour plus d'informations, consultez la documentation officielle qui est assez riche et bien détaillée.

66
Luis Milanese

Utilisez le dernier champ d'application fourni par Laravel hors de la boîte.

Model::latest()->first();

De cette façon, vous ne récupérerez pas tous les enregistrements. Un raccourci plus agréable pour commanderPar.

60
Nick

Pour obtenir les détails du dernier enregistrement

 1.  Model ::all()->last(); or
 2. Model ::orderBy('id', 'desc')->first();

Pour obtenir le dernier identifiant d'enregistrement

1. Model::all()->last()->id; or 
2. Model ::orderBy('id', 'desc')->first()->id;
16
Haseena P A

Essaye ça :

Modèle :: latest () -> get ();

9
MacHero

Laravel collections a method last 

Model::all() -> last(); // last element 
Model::all() -> last() -> pluck('name'); // extract value from name field. 

C'est la meilleure façon de le faire. 

9
mdamia

Pour obtenir les détails du dernier enregistrement, utilisez le code ci-dessous:

Model::where('field', 'value')->get()->last()
2
Jimuel Palaca

D'une manière ou d'une autre, tout ce qui précède ne semble pas fonctionner 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 que je pourrai renflouer quelqu'un.

1
The Dead Guy

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

$user->save();

-ou-

$user = User::create(array('email' => '[email protected]'));

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

Rechercher le dernier enregistrement inséré fonctionne sur un système à faible volume fonctionnera presque tout le temps, mais si vous devez insérer des insertions en même temps, vous pouvez interroger le système pour trouver le mauvais enregistrement. Cela peut vraiment devenir un problème dans un système transactionnel où plusieurs tables doivent être mises à jour.

1
bloggidy

Si la table a un champ de date, ceci (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. 

0
wang ge