ACTIVE RECORD EN LARAVEL Y PORQUE LO USA ELOQUENT

Active Record en Laravel se implementa a través del ORM Eloquent, que es el sistema de mapeo objeto-relacional (ORM) por defecto de Laravel y consiste en que cada modelo representa una tabla de la base de datos, y cada instancia del modelo representa una fila, o registro, de esa tabla. Los métodos para consultar, insertar, actualizar y eliminar datos se definen directamente en la clase del modelo.

Ejemplo

  1. Crear un Modelo:

    php artisan make:model Post
    


    // app/Models/Post.php
    namespace App\Models;
    
    use Illuminate\Database\Eloquent\Model;
    use Illuminate\Database\Eloquent\Factories\HasFactory;
    
    class Post extends Model
    {
        use HasFactory;
    
        protected $fillable = ['title', 'content', 'user_id']; // Campos permitidos en mass assignment
    
        // Relaciones
        public function user()
        {
            return $this->belongsTo(User::class);
        }
    
        public function comments()
        {
            return $this->hasMany(Comment::class);
        }
    }
    
  2. Uso de Active Record:

    // Crear
    $post = new Post();
    $post->title = "Mi primer post";
    $post->content = "Contenido...";
    $post->save();
    
    // Crear con mass assignment
    Post::create([
        'title' => 'Otro post',
        'content' => 'Texto'
    ]);
    
    // Consultar
    $post = Post::find(1);                    // Por ID
    $posts = Post::where('title', 'like', '%laravel%')->get();
    $post = Post::firstOrCreate(['slug' => 'mi-post']);
    
    // Actualizar
    $post->title = "Nuevo título";
    $post->save();
    
    $post->update(['title' => 'Título actualizado']);
    
    // Eliminar
    $post->delete();
    

Consultas comunes

// Crear
$post = new Post();
$post->title = "Mi primer post";
$post->content = "Contenido...";
$post->save();

// Crear con mass assignment
Post::create([
    'title' => 'Otro post',
    'content' => 'Texto'
]);

// Consultar
$post = Post::find(1);                    // Por ID
$posts = Post::where('title', 'like', '%laravel%')->get();
$post = Post::firstOrCreate(['slug' => 'mi-post']);

// Actualizar
$post->title = "Nuevo título";
$post->save();

$post->update(['title' => 'Título actualizado']);

// Eliminar
$post->delete();

Relaciones más usadas

  • One to One: "hasOne" / "belongsTo"
  • One to Many: "hasMany" / "belongsTo"
  • Many to Many: "belongsToMany", usando tabla pivote
  • Polimórficas: morphMany, morphTo
  • Has One Through, Has Many Through

Buenas prácticas

  • Mantener la lógica de negocio en "Service Classes" o "Actions", no directamente en los controladores.
  • Usar "Form Requests" para validación.
  • Usar Eloquent para la mayoría de operaciones, pero usar Query Builder cuando se necesite alto rendimiento.
  • Definir bien los "$fillable" o usar "$guarded = []".
  • Usar "Resource Classes", "API Resources" para transformar datos en JSON.

Características principales de Active Record

Característica Descripción
Convención sobre configuración Nombre de tabla en plural, clave primaria id, timestamps (created_at, updated_at)
CRUD sencillo save(), create(), update(), delete()
Relaciones hasMany, belongsTo, belongsToMany, hasOne, etc.
Query Builder Se pueden encadenar consultas de forma fluida
Soft Deletes Eliminación lógica
Eventos creating, created, updating, saved, etc.
Accesores y Mutadores getNombreAttribute() y setNombreAttribute()
Casting protected $casts = [...]