Consultas en múltiples tablas con laravel +5.5

publicado por: Anonymous

Necesito hacer consultas en múltiples tablas (más de 6) y en cadena, pero desconozco cual será la forma más fácil y eficiente de traer los datos con laravel, ya que tiene un par de métodos para hacer las consultas y traer las colecciones.

Alguien puede aportar un ejemplo de una consulta extensa? Laravel posee algún método especial para este tipo de consultas?

Ejemplo// Tablas: a, b, c, d, e, f

Quiero traer los datos de todas las tablas relacionadas, los datos de a, b, c, d,e,f.

  • A está relacionado con B (1,n)
  • B con C (1,n)
  • C con D (1,n)
  • D con E (1,n)
  • E con F (1,n)

solución

Laravel posee un ORM llamado Eloquent que puedes usar.

Por ejemplo.

Supongamos que tienes 4 tablas llamadas As , Bs, Cs y Ds
Colocamos la s delante de cada letra para saber que el nombre de la tabla es en plural, es decir, que alberga muchas letras A

Cada una relacionada con la otra en una relación de uno a muchos. Es decir, A tiene muchas Bs y Cada B pertenece a una A. Y así hasta llegar a la D.

Puedes usar Eloquent para crear Modelos/Clases que representen a las tablas. Y con ayuda del with aplicar eager loading.

y colocar en tu codigo algo como

$a = AppA::with(['bs', 'bs.cs', 'bs.cs.ds'])->get();

Esto ejecutará todas las SQL necesarias para tomar la información de todas las relaciones de todos los elementos de la tablas As.
Creo que usé muchas veces la palabra todas

Aunque también puedes ignorar el with, pero esto hará que Eloquent aplique el Lazy Loading que quizás te lleve al famoso problema del

N + 1 queries

al momento de querer realizar un foreach de tu relaciones

foreach($a->bs as $b) { 
    foreach($b->cs as $c) { 
        foreach($c->ds as $d) {
        } 
    } 
}

En la documentación puedes ver más acerca de esto

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *