Relación uno a uno: Ejemplo para 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.

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.

relación uno a uno
Laravel 8: Ejemplo de relación uno a uno

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();

Recent Post