En esta serie de videotutoriales te enseñaré cómo construir relaciones entre tus tablas de base de datos, utilizando el ORM Eloquent y sus diferentes métodos.

Mira el código en GitHub: actual, resultado, comparación.

Si deseas adquirir Tinkerwell para probar los ejemplos de este curso de forma más interactiva, por favor usa nuestro enlace de afiliado.

Notas: Ambar Quintana

Cuando usas sistemas de bases de datos relacionales, la información de tu aplicación se almacenará dentro de tablas, creando así registros.

Una tabla está formada por filas y por columnas

Cada fila representa un registro de tu información, es decir, todos los registros que desees almacenar en tu tabla serán filas dentro de la misma.

Las filas suelen estar compuestas por diferentes datos que dan vida a cada registro, estos datos se almacenan como columnas en tu tabla.

Ahora bien, para que los registros de tus diferentes tablas se relacionen entre sí, puedes agregar claves primarias y foráneas en sus columnas, y de esta manera crear un vínculo entre ellas.

Sin embargo, te preguntarás ¿cómo implementamos esto en nuestras aplicaciones de Laravel?

Cuando trabajamos con Programación Orientada a Objetos, vamos a trabajar con clases. Cada clase representará un modelo o entidad que normalmente va a obtener información de una tabla.

Por ejemplo, el modelo User obtendrá información de la tabla users.

Además, los registros ya no se van a representar como filas dentro de una tabla, sino como objetos dentro de nuestras aplicaciones. Por ende, ya no vamos a asociar un registro con otro utilizando claves foráneas o primarias, sino que vamos a utilizar referencias de un objeto a otro.

ORMs como Eloquent tienen la tarea de obtener estas tablas/filas/columnas/claves y convertirlas en objetos con atributos y métodos, que permitan obtener la información de los objetos relacionados desde nuestra aplicación.

Además, Eloquent nos proporciona diferentes métodos para construir las relaciones, uno de ellos es el método hasOne.

Método hasOne

Este método nos permite construir una relación de «uno a uno».

Por ejemplo, imagina que deseamos obtener el perfil relacionado a un usuario. Dado que un usuario puede tener un perfil de usuario utilizaremos la relación hasOne.

Para ello, crea el siguiente método en tu modelo User:

// app/User.php
public function profile()
{
    return $this->hasOne(UserProfile::class);
}

Si tu clase UserProfile pertenece a un espacio de nombre (namespace) diferente al de User, debes importarla al inicio de la clase.

hasOne va a recibir como primer argumento el nombre del modelo relacionado, y construirá la relación.

Puedes pasar el nombre del modelo relacionado como una cadena, solo asegúrate de colocar el nombre completo de la clase, incluyendo su namespace. Ejemplo: App\UserProfile.

Ahora, si deseas obtener el registro relacionado, puedes hacerlo mediante la propiedad dinámica:

//
$user->profile;

La propiedad dinámica te permite acceder a los métodos de una relación como si fuese una propiedad definida en tu modelo.

Material relacionado

Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.

Lección siguiente Estableciendo el lado inverso de una relación con Eloquent ORM