🔁 Relaciones uno a muchos en Eloquent

🔁 Relaciones uno a muchos en Eloquent

En Eloquent, una relación uno a muchos se usa cuando un registro en una tabla puede tener varios registros asociados en otra tabla. Por ejemplo, un usuario puede tener varios posts o productos.

📘 1️⃣ Ejemplo práctico: Usuario y Publicaciones

Supongamos que tenemos dos tablas relacionadas:

  • users → almacena la información básica del usuario.
  • posts → almacena las publicaciones de cada usuario.

La tabla posts contiene una columna user_id que se relaciona con la tabla users.

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

posts
 ├── id
 ├── user_id
 ├── titulo
 ├── contenido
 └── ...
        

⚙️ 2️⃣ Definir la relación en los modelos

En el modelo User definimos la relación con hasMany():

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

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    public function posts()
    {
        return $this->hasMany(Post::class);
    }
}
        

Y en el modelo Post, definimos la relación inversa con belongsTo():

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

use Illuminate\Database\Eloquent\Model;

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

📘 Laravel detecta automáticamente la clave foránea user_id gracias a sus convenciones.

🔍 3️⃣ Consultar registros relacionados

Podemos obtener todos los posts de un usuario con una simple llamada:

$user = User::find(1);
foreach ($user->posts as $post) {
    echo $post->titulo . "<br>";
}
        

Y acceder al usuario desde un post:

$post = Post::find(1);
echo $post->usuario->name;
        

✏️ 4️⃣ Crear registros relacionados

Podemos crear publicaciones directamente desde el modelo User gracias a la relación:

$user = User::find(1);

$user->posts()->create([
    'titulo' => 'Mi primer post en Laravel',
    'contenido' => 'Este es un ejemplo de cómo crear una relación uno a muchos.'
]);
        

💡 Laravel asignará automáticamente el user_id correcto al nuevo post.

🚀 5️⃣ Consultas con Eager Loading

Para mejorar el rendimiento, puedes usar with() para cargar los posts junto con los usuarios:

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

foreach ($usuarios as $usuario) {
    echo $usuario->name . "<br>";
    foreach ($usuario->posts as $post) {
        echo " - " . $post->titulo . "<br>";
    }
}
        

✅ Esto evita consultas repetitivas y mejora el rendimiento del sistema.

✅ Conclusión

  • 🔁 Una relación uno a muchos asocia un registro con varios registros dependientes.
  • 📘 Usa hasMany() y belongsTo() para definir ambas direcciones.
  • ✏️ Puedes crear, leer y recorrer los registros de forma muy intuitiva.
  • 🚀 Usa with() para optimizar tus consultas.

En la próxima lección aprenderemos las relaciones muchos a muchos, ideales para casos en que un registro puede estar asociado con múltiples elementos y viceversa (por ejemplo, usuarios con roles).



Publicar un comentario

0 Comentarios