
Soft delete в Laravel: рабочие приёмы и грабли из практики
Мягкое удаление в Laravel выглядит как одна строка в модели, но ломается на уникальных индексах, каскадах и глобальных скоупах. Разбираем приёмы, которые выдерживают прод.

Мягкое удаление в Laravel выглядит как одна строка в модели, но ломается на уникальных индексах, каскадах и глобальных скоупах. Разбираем приёмы, которые выдерживают прод.

Разбираем новый синтаксис аксессоров через Attribute, кастомные касты и типовые ошибки: почему JSON превращается в строку, а деньги теряют копейки.

Касты и аксессоры в Eloquent удобны ровно до момента, когда в базе оказывается null там, где ждали объект, а json-поле молча перезаписывает изменения. Разбираем, где эти абстракции ломаются.

Скоупы в Eloquent удобны, пока не начинают тихо ломать фильтрацию, ORDER BY и eager loading. Разбираем, где именно, и собираем чек-лист перед выкаткой.

Один и тот же фильтр «только активные» расползается по десяти контроллерам. Разбираем скоупы, кастомные билдеры, DTO-фильтры и репозитории в Laravel 11 — с ценой каждого подхода.

Логика фильтрации расползается по контроллерам, и один и тот же where('active', 1) повторяется в десяти местах. Разбираем локальные и глобальные скоупы Eloquent: когда какой брать и чем каждый платит.

Два клиента одновременно списывают деньги с одного счёта — и остаток пакета уходит в минус, хотя проверка стояла. Разбираем, чем DB::transaction отличается от lockForUpdate и когда нужен ни тот, ни другой.

Двойное списание остатка пакета, гонки при бронировании, дедлоки под нагрузкой — разбираем, как Eloquent работает с транзакциями и блокировками строк и где очевидный код ломается.

Приватные файлы, отданные напрямую, ссылки, которые протухли, и картинки, слитые в публичный бакет. Разбираем, как настроить диски и S3 в Laravel так, чтобы не переделывать потом.

Публичные ссылки, которые возвращают 403, гигабайты в оперативке при загрузке архива и утечка приватных файлов через угадываемый URL — разбираем частые ошибки работы с файловым хранилищем в Laravel и как их не допустить.

Как настроить окружение проекта на Laravel: файл .env, кеш конфигурации и доступ к значениям из кода. Разбор на актуальной версии, чтобы не наступить на грабли с забытым php artisan config:clear.

Локально загрузка файлов работает, а на проде отдаёт приватные ссылки навсегда, тормозит на выгрузке и роняет память на больших файлах. Разбираем, что проверить в конфиге дисков до релиза.