Eloquent ORM — это реализация шаблона Active Record в Laravel, предоставляющая элегантный объектно-ориентированный интерфейс для работы с базой данных.
Каждая модель Eloquent соответствует таблице в БД:
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
// Автоматически связывается с таблицей 'users'
}
php artisan make:model Product -mcr
Флаги:
-m
Создать миграцию-c
Создать контроллер-r
Ресурсный контроллер$user = new User();
$user->name = 'John';
$user->email = 'john@example.com';
$user->save();
// Или сокращенный вариант
$user = User::create([
'name' => 'John',
'email' => 'john@example.com'
]);
// Все пользователи
$users = User::all();
// С условиями
$activeUsers = User::where('active', 1)
->orderBy('name')
->take(10)
->get();
$user = User::find(1);
$user->name = 'John Doe';
$user->save();
// Массовое обновление
User::where('active', 1)->update(['active' => 0]);
$user = User::find(1);
$user->delete();
// Прямое удаление
User::destroy(1);
// Мягкое удаление (soft delete)
class User extends Model
{
use SoftDeletes;
}
class User extends Model
{
public function phone()
{
return $this->hasOne(Phone::class);
}
}
class Post extends Model
{
public function comments()
{
return $this->hasMany(Comment::class);
}
}
class User extends Model
{
public function roles()
{
return $this->belongsToMany(Role::class);
}
}
class User extends Model
{
// Аксессор
public function getNameAttribute($value)
{
return ucfirst($value);
}
// Мутатор
public function setNameAttribute($value)
{
$this->attributes['name'] = strtolower($value);
}
}
// Ленивая (отложенная)
$books = App\Models\Book::all();
foreach ($books as $book) {
echo $book->author->name; // N+1 проблема
}
// Жадная загрузка
$books = App\Models\Book::with('author')->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::creating(function ($user) {
$user->api_token = Str::random(60);
});
}
}
User::chunk(200, function ($users) {
foreach ($users as $user) {
// Обработка
}
});
User::create($request->only(['name', 'email']));
// Защищенные поля
protected $guarded = ['id', 'is_admin'];
// Или разрешенные
protected $fillable = ['name', 'email'];
php artisan make:resource UserResource
Использование:
return new UserResource(User::find(1));
->toSql()
Eloquent ORM — это мощный инструмент Laravel, который значительно упрощает работу с базой данных, предоставляя выразительный синтаксис для сложных операций. При правильном использовании он позволяет писать чистый, поддерживаемый код, сохраняя при этом высокую производительность.