web-dev-qa-db-fra.com

Laravel Générateur de requêtes où max id

Comment puis-je accomplir cela dans Laravel 4.1 Constructeur de requêtes?

select * from orders where id = (select max(`id`) from orders)

J'ai essayé cela, en travaillant mais je ne peux pas obtenir la fonctionnalité éloquente.

DB::select(DB::raw('select * from orders where id = (select max(`id`) from orders)'));

Une idée pour le rendre meilleur?

36
Shiro

Vous devriez pouvoir effectuer une sélection sur la table des commandes, en utilisant un WHERE brut pour trouver le max (id) dans une sous-requête, comme ceci:

 \DB::table('orders')->where('id', \DB::raw("(select max(`id`) from orders)"))->get();

Si vous voulez utiliser Eloquent (par exemple, pour pouvoir convertir votre réponse en objet), vous voudrez utiliser whereRaw, car certaines fonctions telles que toJSON ou toArray ne fonctionneront pas sans Modèles éloquents.

 $order = Order::whereRaw('id = (select max(`id`) from orders)')->get();

Cela nécessite bien sûr que vous ayez un modèle qui étend Eloquent.

 class Order extends Eloquent {}

Comme mentionné dans les commentaires, vous n'avez pas besoin d'utiliser whereRaw, vous pouvez effectuer la totalité de la requête à l'aide du générateur de requête sans SQL brut.

 // Using the Query Builder
 \DB::table('orders')->find(\DB::table('orders')->max('id'));

 // Using Eloquent
 $order = Order::find(\DB::table('orders')->max('id'));

(Notez que si le champ id n’est pas unique, vous n’obtenez qu’une ligne en retour - c’est parce que find() ne renverra que le premier résultat à partir du code SQL serveur.).

47
Tim Groeneveld

Tout comme le docs say

DB::table('orders')->max('id');
38
Ohgodwhy

Pour Laravel ^ 5

Orders::max('id');

Je l'ai utilisé c'est court et meilleur;

17
Afraz Ahmad

Pas besoin d'utiliser une sous-requête, essayez juste cela, ça marche très bien:

  DB::table('orders')->orderBy('id', 'desc')->first();
15
Govind Samrow

Pour les objets, vous pouvez imbriquer les requêtes:

DB::table('orders')->find(DB::table('orders')->max('id'));

Ainsi, la requête interne recherche l'ID max dans la table, puis la transmet à la recherche, ce qui vous permet de récupérer l'objet.

4
tristanbailey

Basé sur le Laravel Documentation , ce qui suit devrait fonctionner:

Vous pouvez appeler les méthodes max après avoir construit votre requête: DB::table('orders')->max('id');

0
Udhav Sarvaiya