Buscar dentro de una Relacion de Eloquent (belongsTo)

En este pequeño articulo, vamos a revisar un concepto básico de como una búsqueda “anidada” utilizando las relaciones de Eloquent, el ORM que nos provee Laravel para interactuar con nuestra Base de Datos.

Caso de Uso

Digamos que tenemos un sistema de reserva de vuelos dentro de una aerolínea. En el cual vamos a tener dos modelos principales, el modelo User  y otro llamado Flight . Queremos ejecutar la búsqueda solo en los vuelos buscando por el nombre del usuario a quien esta asignado. Entonces, nos preguntamos, ¿cómo podemos devolver un conjunto de datos de vuelos buscando a través del modelo de usuarios? Vamos a ello.

Definiendo las Relaciones

Según el caso de uso anterior, sabemos que un vuelo (Flight) pertenece a un usuario (User), por lo cual declaramos la relación que vamos a utilizar dentro del modelo Flight


De esta manera, podremos realizar una consulta en el modelo de User a través del modelo de Flight. Si aun no has visto esto, te recomiendo que pases por la documentación para entender un poco como funcionan las relaciones de Eloquent.

Realizando la Consulta

Ahora vamos a nuestro controlador FlightController para este ejemplo, en el cual tendré un método index que recibe a través de una petición el username a ser buscado.


¿Que estamos haciendo? En el ejemplo anterior estamos buscando todos los vuelos donde el usuario sea similar al que recibo a través de la petición. Al método whereHas le pasamos la relación como el primer parámetro y luego pasamos la condición como la segunda usando una función anónima para ello. De esta manera, Eloquent nos provee una sintaxis bastante limpia para realizar este tipo de consultas.

También disponemos de los métodos orWhereHas, whereDoesntHave dentro de los modelos, los cuales se utilizan de manera similar.


Comparte este artículo

Entra en la discusión y deja tu comentario

Veces