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
- 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); } } - 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.