Блог Переезд с Yii2 на Laravel

14 октября 2025

Переезд с Yii2 на Laravel: что я понял за полгода

Когда я начал писать на Yii2, это был отличный фреймворк для своего времени. Но за последние год-два я всё чаще слышал о Laravel и решил не просто почитать, а реально переехать на него. Проект был среднего размера — что-то вроде админ-панели с несколькими моделями, связями и бизнес-логикой. Половина года потом ушла на полный рефакторинг.

Что было шоком (в хорошем смысле)

Во-первых, Eloquent. В Yii2 я привык к ActiveRecord, но Eloquent на уровень выше. Особенно понравилось работать с отношениями и eager loading — вместо того чтобы мучиться с лишними запросами, пишешь .with() и всё. Код стал чище, а запросы оптимальнее.

Во-вторых, миграции. Yii2 миграции тоже были, но Laravel подошёл к этому более гибко. Каждая миграция — отдельный файл с понятной семантикой. Когда потом нужно разбираться, на каком коммите что поменялось в БД, это несравнимо удобнее.

Но главное — экосистема и философия. Laravel заточен на то, чтобы разработчик писал меньше лишнего кода. Есть готовые решения для аутентификации (Sanctum, Passport), очередей (Queue), кеша (Cache). В Yii2 это всё тоже есть, но чувствуется, что ты собираешь паззл. В Laravel это просто часть фреймворка.

Что было болезненно

Docs. Yii2 документация — это шедевр, есть почти всё, очень подробно. Laravel docs тоже хороши, но более высокоуровневые. Когда нужна конкретная деталь, иногда приходится лезть в исходники или в Stack Overflow.

Также первые два месяца постоянно спотыкался на синтаксисе. Yii2 более verbose, Laravel — более магичный. Привык к тому, что User::find($id) просто работает, не нужно думать о том, как эта магия реализуется под капотом.

Что я понял

Язык имеет значение. PHP 8+ реально меняет то, как ты пишешь код. Typed properties, match expressions, constructor property promotion — всё это делает Laravel код более выразительным и менее подверженным ошибкам.

Экосистема важнее, чем функции. У Yii2 и Laravel примерно одинаковая функциональность, но вокруг Laravel — Laracasts, Nova, Forge, Envoyer. Это ускоряет разработку в разы.

Миграция окупается. Первые два месяца было медленнее, чем на Yii2. К шестому месяцу скорость разработки выросла на 30-40%, потому что на некоторых вещах просто не нужно было думать.

Если вы на Yii2 и думаете, переходить ли — отвечу: стоит. Но рассчитывайте на адаптацию. Это не один день, это пару месяцев. Зато потом код будет писаться быстрее и приятнее.

// Пример того, как я теперь пишу запросы в Laravel
$users = User::with(['posts' => function ($query) {
    $query->where('published', true)
          ->orderBy('created_at', 'desc');
}])
->where('active', true)
->paginate(15);