🧩 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