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?
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.).
Tout comme le docs say
DB::table('orders')->max('id');
Pour Laravel ^ 5
Orders::max('id');
Je l'ai utilisé c'est court et meilleur;
Pas besoin d'utiliser une sous-requête, essayez juste cela, ça marche très bien:
DB::table('orders')->orderBy('id', 'desc')->first();
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.
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');