Ejemplo de relación uno a uno de Laravel 8
En este ejemplo, veremos el ejemplo de relación uno a uno de laravel 8, también puede usar una relación uno a uno en laravel 6 y laravel 7. La relación uno a uno es un tipo muy básico de relación de base de datos. Tiene una tabla con clave principal que hace referencia a la identificación de la otra tabla. Para una relación uno a uno, use el método hasOne and belongsTo
en el modelo para acceder a cada uno de los otros modelos.
También crearemos migración con clave externa, recuperaremos registros usando el modelo, insertaremos nuevos registros, actualizaremos registros, etc.
Crearemos la tabla Usuario y Teléfono. El modelo de User
puede estar asociado con un modelo de teléfono. Para definir esta relación, colocaremos un método de phone
en el modelo User
. El método de phone
debe llamar al método hasOne
y devolver su resultado.
Crear migración
Ahora tenemos que crear la migración para la tabla de usuarios y teléfonos. también agregaremos la clave externa con la tabla de usuarios.
Crear Tabla de Migración de Usuarios
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->timestamps();
});
Crear Tabla de Migración de Teléfonos con Clave Foránea
Schema::create('phones', function (Blueprint $table) {
$table->increments('id');
$table->integer('user_id')->unsigned();
$table->string('phone_no');
$table->timestamps();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
});
Crear modelo y agregar relación en ambos modelos
En el modelo de usuario, podemos crear la función phone () y agregar la relación del modelo de teléfono usando el método hasOne.
Modelo de usuario:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
/**
* Get the phone associated with the user.
*/
public function phone()
{
return $this->hasOne(Phone::class);
}
}
Modelo de teléfono :
podemos acceder al modelo de Phone
desde nuestro modelo de User
. A continuación, definamos una relación en el modelo Phone
que nos permitirá acceder al usuario propietario del teléfono. Podemos definir el inverso de una relación hasOne
usando el método belongsTo
.
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Phone extends Model
{
/**
* Get the user that owns the phone.
*/
public function user()
{
return $this->belongsTo(User::class);
}
}
Si la clave externa en el modelo de Phone
no es user_id
, puede pasar un nombre de clave personalizado como segundo argumento para el método de belongsTo
.
public function user()
{
return $this->belongsTo(User::class, 'foreign_key');
}
Recuperar registros usando el modelo:
Una vez que se define la relación, podemos recuperar el registro relacionado usando las propiedades dinámicas de Eloquent. Entonces, aquí podemos usar el modelo de usuario con función de teléfono.
$phone = User::find(1)->phone;
$user = Phone::find(1)->user;
Crear registros usando el modelo
$user = User::find(1);
$phone = new Phone;
$phone->phone_no = '9876543210';
$user->phone()->save($phone);
$phone = Phone::find(1);
$user = User::find(1);
$phone->user()->associate($user)->save();