Si dovrebbe essere in grado di eseguire una selezione sulla tabella Ordini, utilizzando un grezzo dove trovare il massimo (id
) in una subquery, come questo:
DB::table('orders')->where('id', DB::raw("(select max(`id`) from orders)"))->get();
Se si desidera utilizzare Eloquent (ad esempio, in modo da poter convertire la risposta a un oggetto), si desidera utilizzare whereRaw, poiché alcune funzioni come toJSON
o toArray
non funzioneranno senza l'uso di modelli Eloquent.
$order = Orders::whereRaw('id = (select max(`id`) from orders)')->get();
Ciò, ovviamente, richiede che si disponga di un modello che estende Eloquent.
class Orders extends Eloquent {}
Come accennato nei commenti, non è necessario utilizzare whereRaw
, si può fare l'intera query utilizzando il generatore di query SQL, senza crudo.
// Using the Query Builder
DB::table('orders')->find(DB::table('orders')->max('id'));
// Using Eloquent
$order = Orders::find(DB::table('orders')->max('id'));
(Si noti che se il campo id
non è univoco, si otterrà solo una fila indietro -. Questo è dovuto al fatto find()
tornerà solo il primo risultato dal server SQL).
è possibile farlo catena 'toArray()'? Ho ricevuto un errore se aggiungo con -> toArray(). – Shiro
@Shiro 'toArray()' è un metodo di modello di Eloquent, non di DB. Dovrai invece usare 'whereRaw()'. Ho aggiornato la mia risposta. – timgws
grazie per la tua risposta, posso sapere perché hai messo array (25) per questo? – Shiro