Sélectionnez la Dernière Ligne de la Table
Je voudrais récupérer le dernier fichier inséré dans ma table. Je sais que la méthode first()
existe et vous offre le premier fichier dans la table, mais je ne sais pas comment obtenir la dernière insertion.
- Voir aussi stackoverflow.com/questions/33321447/... Comment trier une relation (hasMany)
- C'est pour quelqu'un de poser et de répondre à propos de Laravel. Rappelez-vous qu'il est important de spécifier les Laravel version dont vous parlez. Généralement la version 4 et 5 ont des différences et des versions plus anciennes aussi.
Vous devez vous connecter pour publier un commentaire.
Vous aurez besoin de la commande par le même champ que vous souhaitez commander par moment, mais dans l'ordre décroissant.
Par exemple, si vous avez une heure lors de l'envoi était fait appelé
upload_time
, vous feriez quelque chose comme cela;Pour Le Pré-Laravel 4
Pour Laravel 4 et suivants
Pour Laravel 5.7 et à partir de
Ce sera l'ordre des lignes dans la table de fichiers par temps de téléchargement, ordre décroissant, et de prendre le premier. Ce sera le dernier fichier téléchargé.
orderBy
, pasorder_by
User::orderby('created_at', 'desc')->first();
orderBy('created_at', 'desc')
Files::orderBy(id', 'desc')->first();
Ordre par date fonctionne plus parce que la date est une chaîne et plus susceptibles de ne pas indexés. Alors que la clé primaire est indexé et fonctionne super rapide. Même si created_at indexé, il est indexée à la chaîne et non INT en cas de primaire. L'indice de la chaîne a de moins bonnes performances.orderBy('created_at', 'desc')
ne vous donne pas la dernière ligne. Exemple: en 3 lignes peuvent avoir exactement la même valeur d'HORODATAGE et avecorderBy('created_at', 'desc')
, vous recevrez la première de la 3(qui n'est pas nécessairement la dernière ligne)Windows -> Start -> Shutdown
:D.created_at
, mais le problème vient quand la principale clé de code n'est pas un auto_increment index.L'utilisation de la dernière portée fournis par Laravel hors de la boîte.
De cette façon, vous n'êtes pas récupérer tous les enregistrements. Un beau raccourci pour orderBy.
created_at
colonne($timestamps = true)
dans le Modèle, mais peut être désactivé à la demande si vous avez une erreur si undefinedVous n'avez jamais dit que vous utilisez Éloquent, Laravel par défaut de l'ORM ou pas. Dans le cas où vous êtes, disons que vous voulez obtenir la dernière entrée d'une table Utilisateur, par created_at, vous avez sans doute pu le faire comme suit:
Premier des ordres utilisateurs par champ created_at, descendingly, et c'est le premier enregistrement du résultat.
Qui va vous renvoyer une instance de l'objet Utilisateur, n'est pas une collection. Bien sûr, pour rendre l'utilisation de cette solution, vous avez obtenu d'avoir un modèle d'Utilisateur, l'extension Éloquent de la classe. Cela peut sembler un peu déroutant, mais c'est vraiment facile à prendre en main et ORM peut être vraiment utile.
Pour plus d'informations, consultez la la documentation officielle ce qui est assez riche et bien détaillé.
Pour obtenir les dernières enregistrer les détails
Model ::all()->last();
ouModel ::orderBy('id', 'desc')->first();
Pour obtenir les dernières id de l'enregistrement
Model::all()->last()->id;
ouModel ::orderBy('id', 'desc')->first()->id;
Laravel collections a la méthode de la dernière
C'est la meilleure façon de le faire.
all()
méthode se charge de tous les éléments. Cela ne peut pas fonctionner sur une table avec des millions d'enregistrements.last()
renvoie un seul Éloquent exemple et n'est pas une Collection, et en appelantpluck()
qui est égal à l'appel deModel::all()->pluck('name')
, donc retour de laname
attribut de tous les lignes de la tableEssayez ceci :
Pour obtenir le dernier enregistrement de détails, utilisez le code ci-dessous:
Si vous êtes à la recherche pour la ligne réelle de ce que vous venez d'insérer avec Laravel 3 et 4 lorsque vous effectuez une
save
oucreate
action sur un nouveau modèle comme:-ou-
puis inséré instance du modèle sera retourné et peut être utilisé pour d'autres mesures telles que la redirection vers la page de profil de l'utilisateur nouvellement créé.
À la recherche pour le dernier enregistrement inséré fonctionne sur un faible volume système fonctionne presque tout le temps, mais si jamais vous avez à insère aller dans le même temps, vous pouvez vous retrouver requête pour trouver l'enregistrement incorrect. Cela peut vraiment devenir un problème dans un système transactionnel où plusieurs tables besoin de mise à jour.
En quelque sorte tous les ci-dessus ne semble pas fonctionner pour moi dans laravel 5.3,
donc, j'ai résolu mon problème en utilisant:
espère que je suis capable pour sauver quelqu'un.
Si la table a champ de date, ce(
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.