En este este tip de Laravel les voy a comentar un excelente método de Eloquent que nos permite trabajar de una forma cómoda con nuestras relaciones, el método es whereDoesntHave.
El método whereDoesntHave nos permite obtener los registros que no tienen registros relacionados. Veamos un ejemplo para que se entienda mejor.
Utilizando el método whereDoesntHave
Supongamos que queremos obtener todas las publicaciones que no tienen comentarios. Entonces utilizarÃamos whereDoesntHave de la siguiente forma:
Como podemos ver, al método le estamos enviado el parámetro "comments"
, ¿y de donde sale esto? Bueno, comments es una de las relaciones que tenemos en el modelo Post
que, justamente, se llama comments()
.
Resumiendo, el primer parámetro de whereDoesntHave debe ser el nombre de una relación que tengamos en el modelo.
Usando relaciones anidadas en whereDoesntHave
Este método de Eloquent puede ser aplicado a relaciones anidadas, utilizando la notación de punto. Veamos como serÃa.
En este ejemplo estarÃamos obteniendo todas las publicaciones donde sus comentarios no tienen votos.
En este caso se entiende que la relación votes
se encuentra en el modelo Comment
y no en el modelo Post
.
Funciones anónimas en whereDoesntHave
También es posible enviarle una función anónima como segundo parámetro al método whereDoesntHave. Por ejemplo:
Explotando al máximo whereDoesntHave
El verdadero tip creo que es este. ImagÃnense sumar el poder de whereDoesntHave con el poder de los scope 🤯. PodrÃamos hacer cosas geniales, como la siguiente:
Utilizando scopes más el método whereDoesntHave podemos crear consultas muy poderosas y además nuestro código queda superlegible, que es algo que siempre un buen programador debe buscar, legibilidad de código.
Versión disponible
El método whereDoesntHave esta disponible a partir de Laravel 4.2.
Espero que les haya gustado este Laravel Tip. Nos vemos en la próxima 😀.
Que buen tip, la verdad que lo habÃa usado una vez pero no sabÃa exactamente el uso real que se le daba.
Gracias