🧩 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 ybelongsTo()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).
0 Comentarios
Si desea contactar comigo, lo puede hacer atravez deste formulario gracias