Problema
tiene
, con
y donde tiene
a veces puede ser confuso para los desarrolladores principiantes. Damos una perspectiva sobre lo que significan cada uno de esos
Solución
con()
se usa generalmente con una carga ansiosa, que es una forma rápida de extraer modelos relacionados. Básicamente, significa que, junto con el modelo principal, Laravel precargará las relaciones enumeradas. Esto es beneficioso cuando necesita cargar datos adicionales y desea evitar hacer N+1
Db malas prácticas. Con una carga ansiosa, solo ejecuta una consulta de DB adicional en lugar de potencialmente cientos de consultas adicionales.
Ejemplo:
Usuario> Hasmany> OrganizaciónTiene
tiene()
se utiliza para filtrar el modelo de selección basado en la relación seleccionada. Es básicamente un método de relaciones. Si solo usas tiene ('organización')
, Usando el mismo ejemplo de usuarios y organizaciones, significaría que atraerá a todos los usuarios que tienen al menos una organización en su 'cartera'.
Ejemplo:
Usuario> Hasmany> OrganizaciónDonde tiene
donde tiene()
es casi lo mismo que tiene()
. Solo le permite especificar filtros adicionales para el modelo relacionado que se verifica.
Ejemplo:
Usuario> Hasmany> Organización