En este ejemplo veremos lo sencillo que es relacionar tablas en Laravel.
Para esto, vamos a crear 2 tablas:
- usuarios
- roles
La relación que vamos a realizar será entre el usuario y el rol asociado.
Creando la tabla de roles
Ejecutamos desde la consola que deberá estar posicionada en la carpeta de nuestro proyecto.
php artisan make:migration create_roles_table
Luego vamos a definir los campos para nuestra migración en la nueva clase creada.
public function up()
{
Schema::create('roles', function (Blueprint $table) {
$table->increments('id');
$table->string("nombre",20);
$table->string("descripcion",100);
$table->timestamps();
});
}
Y para ejecutar la migración debemos ejecutar el comando:
php artisan migrate
Creando la tabla de usuarios
Los pasos son muy similares al que vimos para crear la tabla de roles.
php artisan make:migration create_usuarios_table
Nos toca agregar los campos y la relación entre ambas tablas con la diferencia que usaremos el método foreign para generar la relación.
public function up()
{
Schema::create('usuarios', function (Blueprint $table) {
$table->increments('id');
$table->string('nombre_usuario',20);
$table->string('contrasena');
$table->integer("rol_id")->unsigned();
$table->foreign("rol_id")->references("id")->on("roles")
->onDelete("cascade")
->onUpdate("cascade");
$table->timestamps();
});
}
Nota: los métodos onDelete y onUpdate lo usamos para que se puedan eliminar o actualizar los registros mediante cascada. Por ejemplo, si tenemos un registro y lo queremos eliminar no vamos a poder hasta eliminar su relación previamente, con este paso hacemos que borre la relación automáticamente. Bueno, esto es más un tema de SQL.
Finalmente ejecutamos la migración
php artisan migrate
Conclusión
Consideren que para que la relación sea válida los campos deben contener las mismas características y tipos. Es como si lo hicieramos desde la base de datos, para que la relación sea válida deberán ser del mismo tipo.