Laravel 5, parte 4: Modelos y relaciones

Bueno, entrando un poco más en nuestro primer CRUD, podemos continuar con los modelos, donde tratamos la parte de datos que van a interactuar con nuestra aplicación.

Por empezar ya tenemos creado el modelo User, que éste viene por defecto en la instalación de Laravel, así que vamos a crear los otros dos, Tarea y Estado.

Importante: a la hora de crear tablas deberíamos crearlas en plural, sin embargo los modelos deberían escribirse en singular, y con la primer letra en mayúscula:

User –> users

Tarea –> tareas

Estado –> estados

(Modelo –> Tabla)

Ojo con esto, porque al escribir las tablas en plural, a diferencia de los modelos que son en singular, no significa la palabra como tal en castellano/español. Por ejemplo si tuviésemos que trabajar con canciones en nuestra aplicación, el modelo sería «Cancion», pero la tabla no sería «canciones» sino «cancions»:

Cancion –> canciones

Cancion –> cancions

Simplemente agregamos una «s» al final. Y tampoco hay que escribir con tildes, aunque eso debería estar más que claro:

Canción –> canciones

Aunque si no querés seguir esta regla, y querés ponerle cualquier otro nombre a la tabla, dentro del modelo (ahora vemos como crearlos), podés agregar un atributo donde indicar el nombre de la tabla:

protected $table = 'nombre_de_la_tabla';

Modelos

Bien, vamos a ir a la consola, y vamos a crear los modelos que nos faltan:

php artisan make:model Estado

Y luego:

php artisan make:model Tarea

Si ahora vamos dentro de la carpeta «app», podemos ver que ya están creados los nuevos modelos. Así que vamos a editar ambos, y también el que ya estaba desde el principio, que es User.

Relaciones

Podemos ver los distintos tipos de relaciones dentro de la documentación de Laravel:

https://laravel.com/docs/5.0/eloquent#relationships

Pero, de momento vamos a crear las relaciones de nuestra aplicación que en realidad ambas son de 1 a n, tanto para las tareas y los usuarios, como para las tareas y los estados.

Dentro de User vamos a agregar el siguiente método:

public function tareas()
{
   return $this->hasMany('App\Tarea');
}

Y dentro de estados lo mismo:

public function tareas()
{
   return $this->hasMany('App\Tarea');
}

Esto va a indicarle a ambas entidades que pueden estar ligadas a varias tareas. Por ejemplo si queremos recuperar un usuario en particular haríamos esto:

$usuario = Usuario::find(1);

Aquí recuperamos el usuario con el id 1.

Y si también queremos recuperar las tareas del mismo:

$usuario = Usuario::find(1);
$tareas = $usuario->tareas;

Tan sencillo como eso.

Finalmente dentro de nuestro modelo Tarea vamos a hacer la otra parte, agregamos a los métodos que indiquen a qué entidad pertenecen, a qué usuario y en qué estado están:

public function usuario()
{
   return $this->belongsTo('App\User');
}

Y luego:

public function estado()
{
   return $this->belongsTo('App\Estado');
}

Esto nos va a permitir que cuando recuperemos una tarea, también podremos ver su estado:

$tarea = Tarea::find(5);
$estado = $tarea->estado;

¿Fácil? Claro que sí.

Anterior: Laravel 5, parte 3: Usuarios

Siguiente: Laravel 5, parte 5: Controladores y Rutas

 

Descargar ejemplo completo