updateorcreate php laravel query-builder

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();