馃З Relaciones uno a uno en Eloquent

馃З Relaciones uno a uno en Eloquent

En Eloquent, una relaci贸n uno a uno se utiliza cuando un registro de una tabla est谩 asociado con exactamente un registro de otra tabla. Por ejemplo, un usuario puede tener un 煤nico perfil asociado.

馃懃 1️⃣ Ejemplo pr谩ctico: Usuario y Perfil

Supongamos que tenemos dos tablas:

  • users → almacena la informaci贸n b谩sica del usuario.
  • profiles → almacena los datos adicionales del perfil del usuario.

La tabla profiles contiene una columna user_id que se relaciona con el id de la tabla users.

users
 ├── id
 ├── name
 ├── email
 └── ...

profiles
 ├── id
 ├── user_id
 ├── telefono
 ├── direccion
 └── ...
        

⚙️ 2️⃣ Definir la relaci贸n en el modelo

En el modelo User, definimos la relaci贸n con el perfil usando el m茅todo hasOne():

// app/Models/User.php
namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    public function perfil()
    {
        return $this->hasOne(Profile::class);
    }
}
        

Y en el modelo Profile, definimos la relaci贸n inversa con belongsTo():

// app/Models/Profile.php
namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Profile extends Model
{
    public function usuario()
    {
        return $this->belongsTo(User::class);
    }
}
        

馃挕 Laravel detecta autom谩ticamente la clave for谩nea user_id por convenci贸n, pero puedes personalizarla si lo necesitas.

馃攳 3️⃣ Consultar registros relacionados

Una vez definida la relaci贸n, puedes acceder al perfil de un usuario directamente:

$user = User::find(1);
echo $user->perfil->telefono;
        

Tambi茅n puedes acceder al usuario desde el perfil:

$perfil = Profile::find(1);
echo $perfil->usuario->name;
        

馃 4️⃣ Crear registros relacionados

Laravel permite crear registros asociados f谩cilmente mediante relaciones:

$user = User::find(1);

$user->perfil()->create([
    'telefono' => '123456789',
    'direccion' => 'Calle Principal 123'
]);
        

馃摌 Laravel autom谩ticamente asignar谩 el user_id al nuevo registro del perfil.

馃攧 5️⃣ Cargar relaciones con Eager Loading

Para optimizar tus consultas, puedes usar with() y cargar las relaciones de forma anticipada:

$usuarios = User::with('perfil')->get();

foreach ($usuarios as $usuario) {
    echo $usuario->name . ' - ' . $usuario->perfil->telefono;
}
        

馃挕 Esto evita consultas repetidas y mejora el rendimiento de tu aplicaci贸n.

✅ Conclusi贸n

  • 馃З Una relaci贸n uno a uno asocia un registro con otro 煤nico registro.
  • 馃搧 Usa hasOne() en el modelo principal y belongsTo() en el modelo secundario.
  • ⚙️ Puedes crear y acceder a los datos relacionados f谩cilmente con Eloquent.
  • 馃殌 Usa with() para cargar relaciones de manera eficiente.

En la pr贸xima lecci贸n aprender谩s sobre las relaciones uno a muchos en Laravel, donde un registro puede estar vinculado a varios otros registros (por ejemplo, un usuario con muchos posts o productos).



Publicar un comentario

0 Comentarios