Ответ
Да, Eloquent ORM — это основной инструмент для работы с данными в моих Laravel-проектах. Это реализация паттерна Active Record.
Базовые операции и примеры:
// Создание
$user = User::create(['name' => 'Alex', 'email' => 'alex@example.com']);
// Чтение с условиями
$activeUsers = User::where('is_active', true)
->whereHas('posts', function ($query) {
$query->where('published_at', '>', now()->subWeek());
})
->orderBy('name')
->paginate(15);
// Отношения (Relationships)
class User extends Model {
public function posts(): HasMany { return $this->hasMany(Post::class); }
public function latestPost(): HasOne { return $this->hasOne(Post::class)->latestOfMany(); }
public function roles(): BelongsToMany { return $this->belongsToMany(Role::class); }
}
// Eager Loading для решения проблемы N+1
$users = User::with(['posts' => function ($query) {
$query->where('status', 'published');
}])->get();
foreach ($users as $user) {
foreach ($user->posts as $post) { // Никаких дополнительных запросов
echo $post->title;
}
}
Продвинутый опыт:
- Мутаторы/Аксессоры: Использовал для форматирования данных (например, хеширования пароля в сеттере, форматирования даты в геттере).
- Глобальные скоупы (Global Scopes): Добавлял мягкое удаление (
SoftDeletes) и скоупы для мультитенантности. - События моделей (Observers): Назначал наблюдателей для логирования изменений или отправки уведомлений.
- Производительность: Для тяжелых отчетов иногда комбинировал Eloquent с
DB::raw()или использовалchunk()/cursor()для обработки больших данных без перегрузки памяти. - Тестирование: Писал фабрики (Factories) и сиды (Seeders) для наполнения базы тестовыми данными.