Eloquent — это как автомат в руках салаги. Красиво блестит, можно стрелять без прицела, но когда патроны заканчиваются — понимаешь, что всё это было понты. Laravel продаёт Eloquent как «удобный ORM, работающий из коробки». И да, пока у тебя таблица posts и пара связей — норм. Но если ты реально работаешь в проде, а не клепаешь туториалы для новичков, Eloquent быстро показывает, где заканчивается удобство и начинается цирк с SQL-запросами.
Модель за три секунды
Создать модель в Laravel можно одной командой:
php artisan make:model Post
Да, Laravel тут молодец — в отличие от старых PHP-проектов, где модель руками пилишь, тут за тебя делают заготовку. Только вот заготовка — это пустышка. Всё, что дальше, зависит от тебя.
Миграции: красиво на словах
Миграции в Laravel подаются как «божественный способ управлять схемой БД». На деле — просто ещё один слой абстракции. Нормально, пока схема простая.
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->text('body');
$table->timestamps();
});
Всё выглядит мило. Но стоит тебе захотеть что-то не стандартное (нестандартные индексы, хитрые типы) — привет, сырой SQL. И это нормально. Потому что миграции — не серебряная пуля, а костыль для того, чтобы не ругаться с DBA.
Отношения: рай для ленивых
Eloquent делает связи настолько простыми, что хочется плакать от счастья.
public function posts()
{
return $this->hasMany(Post::class);
}
и
public function user()
{
return $this->belongsTo(User::class);
}
И ты реально можешь писать $user->posts и получать коллекцию постов. Магия. Пока ты не открыл laravel-debugbar и не увидел, что твой код генерит 100+ запросов вместо одного нормального JOIN. N+1 запросы — это то, что убивает новичков, а потом бьёт и по продакшену.
Запросы: красиво, но иногда убого
Post::where('title', 'like', '%Laravel%')->get();Да, читается как сказка. Но не забывай: за этой строкой сидит обычный SQL. А если ты вдруг решил сделать вложенные условия, подзапросы или хитрые выборки — готовься либо вгрызаться в query builder, либо писать сырой SQL, потому что ORM до конца тебя не спасёт.
Сохранение и обновление: всё просто
Создать запись:
$post = new Post(['title' => 'My New Post', 'body' => 'Text']);
$post->save();
Обновить:
$post = Post::find(1);
$post->title = 'Updated Title';
$post->save();
Подводные камни
- N+1 убийца. Ты можешь писать красивые
$user->posts, но под капотом это десять лишних запросов. Хочешь быстро? Учисьwith(),load()и жонглировать жадной загрузкой. - ORM != оптимизация. Eloquent не думает за тебя. Он даст sugar-синтаксис, но не избавит от кривой архитектуры.
- Миграции не везде справятся. Иногда без сырого SQL не обойтись, и это не «грязь», это реальность.
- Магия стоит ресурсов. Каждый удобный метод — это пара лишних операций. В мелочах незаметно, но в проде всё аукнется.
Вывод
Eloquent в Laravel — это как быстрый угар с ромом: весело, пока не начался похмельный синдром. Для мелких проектов он топ: быстро, удобно, не надо думать о SQL. Для серьёзных проектов — это источник боли, если ты слепо веришь в магию. Используй с умом, не ленись заглядывать в сгенерённые запросы и помни: иногда старый добрый сырой SQL даёт больше контроля, чем сотня «красивых» методов Eloquent.
0 комментариев