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.
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é.
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.
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.
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;
Essaye ça :
Modèle :: latest () -> get ();
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.
Pour obtenir les détails du dernier enregistrement, utilisez le code ci-dessous:
Model::where('field', 'value')->get()->last()
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.
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.
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.