php - updateorcreate - pluck laravel
Laravel Query Builder donde max id (5)
¿Cómo logro esto en Laravel 4.1 QUery Builder?
select * from orders where id = (select max(`id`) from orders)
Intenté esto, trabajando, pero no puedo obtener la característica elocuente.
DB::select(DB::raw(''select * from orders where id = (select max(`id`) from orders)''));
Alguna idea para hacerlo mejor?
Debería poder realizar una selección en la tabla de pedidos, utilizando un DONDE sin procesar para encontrar el máximo ( id
) en una subconsulta, como esta:
DB::table(''orders'')->where(''id'', DB::raw("(select max(`id`) from orders)"))->get();
Si desea usar Eloquent (por ejemplo, para que pueda convertir su respuesta a un objeto), querrá usar whereRaw, porque algunas funciones, como toJSON
o toArray
, no funcionarán sin usar modelos Eloquent.
$order = Orders::whereRaw(''id = (select max(`id`) from orders)'')->get();
Eso, por supuesto, requiere que tengas un modelo que extienda Eloquent.
class Orders extends Eloquent {}
Como se mencionó en los comentarios, no es necesario utilizar whereRaw
, puede hacer toda la consulta utilizando el generador de consultas sin SQL sin formato.
// Using the Query Builder
DB::table(''orders'')->find(DB::table(''orders'')->max(''id''));
// Using Eloquent
$order = Orders::find(DB::table(''orders'')->max(''id''));
(Tenga en cuenta que si el campo id
no es único, solo obtendrá una fila atrás , esto es porque find()
solo devolverá el primer resultado del servidor SQL).
Para Laravel ^ 5
Orders::max(''id'');
Lo usé es corto y mejor;
Para objetos puedes anidar las consultas:
DB::table(''orders'')->find(DB::table(''orders'')->max(''id''));
Entonces, la consulta interna busca el ID máximo en la tabla y luego lo pasa al buscador, que le devuelve el objeto.
No es necesario usar la sub consulta, solo prueba esto, funciona bien:
DB::table(''orders'')->orderBy(''id'', ''desc'')->first();