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.