En este tutorial, le haré saber cómo escribir subquery dentro de la instrucción select en Laravel 5. Laravel permite a los usuarios escribir una consulta sin usar el DB::raw() método.
Caso de uso de una sub consulta en Laravel
En algún momento necesitamos desarrollar la aplicación donde necesitamos obtener detalles de usuario con sus seguidores como la aplicación "Instagram".En la aplicación Instagram al visitar el perfil de usuario, verá el número total de publicaciones, sus seguidores y la cuenta siguiente.
En este escenario, podemos escribir una función mysql o usar subconsulta en la instrucción select.
Para este ejemplo, tendré dos tablas users y user_followers .
Supongamos que la tabla de users tiene campos id, name, email y la tabla user_followers tiene id, user_id, follower_id.
Primero utilizaré la consulta en bruto de MySQL para obtener detalles de la siguiente manera:
SELECT users.*, (SELECT count(*) FROM user_followers WHERE user_followers.user_id = users.id ) as total_followers FROM `users``
Laravel Query Builder (Generador de consultas)
Ahora escribiré la consulta en Laravel para lograr la misma funcionalidad.$datos = \DB::table("users") ->select("users.*", \DB::raw("(SELECT count(*) FROM user_followers WHERE user_followers.user_id = users.id ) as total_followers")) ->get(); dd($datos);
Puede escribir la subconsulta con instrucción join.
1 comentarios:
Write comentariosBUenos dias,
ReplyHe estado tratando de replicar lo que explicas, pero me encuentro con un error, este es mi codigo
$data = CierreVn::whereBetween('fecha_cierre', [$fecha_inicial,$fecha_final])
->select('concesionario','nombre_concesionario','referencia','vendedor',('(SELECT SUM(.unidad) FROM cierre_vn WHERE cierre_vn.fecha_cierre between '.$fecha_inicial.' AND '.$fecha_final.' GROUP BY cierre_vn.vendedor) as unidades'))
->orderBy('concesionario', 'ASC')
->orderBy('vendedor', 'ASC')
->get();