Ответ
Да, 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) для наполнения базы тестовыми данными.
Ответ 18+ 🔞
Слушай, а 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); }
}
Но главное, чувак, не наступи на эти грабли — проблему N+1. Без with() твое приложение сожрёт столько запросов, что сервер просто ляжет и не встанет. А с ним — красота.
$users = User::with(['posts' => function ($query) {
$query->where('status', 'published');
}])->get();
foreach ($users as $user) {
foreach ($user->posts as $post) { // И ни одного лишнего запроса, мать его!
echo $post->title;
}
}
А теперь про продвинутый уровень, там где уже пахнет жареным.
- Мутаторы и аксессоры — это как скрытая магия. Нужно пароль захэшировать перед сохранением или дату красиво отформатировать при выводе? Без проблем, пишешь метод в модели, и Eloquent сам всё сделает. Удобно, блядь, до охуения.
- Глобальные скоупы (Global Scopes) — моя любовь.
SoftDeletes— это святое. А если проект мультитенантный, то скоупы, которые автоматом подставляютwhere('tenant_id', ...)— это спасение от дурака. Без них доверия ебать ноль, что кто-то не забудет этот фильтр. - События моделей и наблюдатели (Observers) — мощнейшая штука. Нужно залогировать каждое изменение пользователя или отправить уведомление, когда заказ оплачен? Вешаешь Observer и спишь спокойно. Всё в одном месте, а не размазано по контроллерам.
- Производительность — вот где собака порылась. Когда пишешь какой-нибудь тяжёлый отчёт, чистый Eloquent иногда начинает тупить, как старая кобыла. Тут приходится лезть в
DB::raw()или использоватьchunk()иcursor(), чтобы не сожрать всю оперативку, обрабатывая миллион записей разом. Иначе будет тебе хиросима, а не отчёт. - Тестирование — без фабрик и сидеров сейчас вообще никуда. Наполнить базу правдоподобными тестовыми данными за секунду — это не просто удобно, это необходимость. Иначе будешь вручную писать массивы, а это пиздец какой кошмар.
В общем, Eloquent — инструмент на все случаи жизни. С одной стороны, простой и интуитивный, а копнёшь глубже — там целая вселенная возможностей, лишь бы голова работала. Главное — не бояться в документацию заглядывать, там много чего полезного зарыто.