viernes, 14 de julio de 2017

¿Cómo usar subquery en la instrucción select en Laravel 5.4?

   


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".

Laravel 5.4

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.



Cesar GI

About Cesar GI

Lo que me importa es poder enseñar lo poco que se, por que asi como yo aprendo leyendo gracias a las personas que comparten sus conocimiento yo tambien quiero ayudar a la comunidad en español aportando lo poco que he aprendido hasta el momento.

1 comentarios:

Write comentarios
Libar
AUTHOR
28 de agosto de 2017, 8:27 delete

BUenos dias,

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

Reply
avatar