Eloquent es el ORM de Laravel que facilita la interacción con bases de datos utilizando un enfoque orientado a objetos. Cada tabla de la base de datos tiene un "Modelo" correspondiente que permite interactuar con esa tabla.
Para comenzar a usar Eloquent, primero necesitas configurar tu conexión a la base de datos en el archivo config/database.php
. Laravel soporta varias bases de datos, incluyendo MySQL, PostgreSQL, SQLite, y SQL Server.
// config/database.php
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
],
Un modelo en Eloquent representa una tabla en tu base de datos. Los modelos se definen en el directorio app/Models
.
// app/Models/User.php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
use HasFactory;
// Si la tabla no sigue las convenciones de nombres de Laravel, puedes especificar el nombre de la tabla:
// protected $table = 'my_users';
// Si la tabla no tiene las columnas created_at y updated_at
// public $timestamps = false;
}
$users = User::all();
$user = User::find(1);
$users = User::where('active', 1)->get();
$users = User::orderBy('name', 'asc')->get();
$user = new User;
$user->name = 'John Doe';
$user->email = 'john@example.com';
$user->save();
User::create([
'name' => 'Jane Doe',
'email' => 'jane@example.com',
]);
Nota: Asegúrate de que los campos estén listados en la propiedad $fillable
del modelo para permitir la asignación masiva.
class User extends Model
{
protected $fillable = ['name', 'email'];
}
$user = User::find(1);
$user->name = 'John Smith';
$user->save();
User::where('active', 1)->update(['active' => 0]);
$user = User::find(1);
$user->delete();
User::destroy([1, 2, 3]);
class User extends Model
{
public function phone()
{
return $this->hasOne(Phone::class);
}
}
class Phone extends Model
{
public function user()
{
return $this->belongsTo(User::class);
}
}
class Post extends Model
{
public function comments()
{
return $this->hasMany(Comment::class);
}
}
class Comment extends Model
{
public function post()
{
return $this->belongsTo(Post::class);
}
}
class User extends Model
{
public function roles()
{
return $this->belongsToMany(Role::class);
}
}
class Role extends Model
{
public function users()
{
return $this->belongsToMany(User::class);
}
}
class Photo extends Model
{
public function imageable()
{
return $this->morphTo();
}
}
class Post extends Model
{
public function photos()
{
return $this->morphMany(Photo::class, 'imageable');
}
}
class User extends Model
{
public function photos()
{
return $this->morphMany(Photo::class, 'imageable');
}
}
class User extends Model
{
public function getFullNameAttribute()
{
return "{$this->first_name} {$this->last_name}";
}
}
class User extends Model
{
public function setPasswordAttribute($value)
{
$this->attributes['password'] = bcrypt($value);
}
}
$users = User::with('posts')->get();
class User extends Model
{
public function scopeActive($query)
{
return $query->where('active', 1);
}
}
$activeUsers = User::active()->get();
class User extends Model
{
protected static function booted()
{
static::addGlobalScope('active', function (Builder $builder) {
$builder->where('active', 1);
});
}
}
Eloquent proporciona varios eventos como creating
, created
, updating
, updated
, deleting
, deleted
, entre otros.
class User extends Model
{
protected static function booted()
{
static::creating(function ($user) {
// Lógica antes de crear un usuario
});
static::created(function ($user) {
// Lógica después de crear un usuario
});
}
}
Puedes convertir modelos y colecciones de Eloquent a JSON usando el método toJson
.
return User::all()->toJson();
$users = User::paginate(15);
User::chunk(100, function ($users) {
foreach ($users as $user) {
// Lógica para cada usuario
}
});
Laravel Eloquent es una herramienta poderosa para interactuar con bases de datos de una manera intuitiva y eficiente. Esta guía ha cubierto los conceptos básicos y avanzados, permitiéndote utilizar Eloquent para la mayoría de las tareas de manipulación de datos en tus aplicaciones Laravel. Con práctica y exploración, podrás aprovechar al máximo todas las características que Eloquent ofrece.
Jorge García
Fullstack developer