Известные ограничения
- Laravel 12 с MySQL или PostgreSQL: фильтры и сортировки по связи или агрегату через связь
hasOneThrough, определённую сofMany(), падают в самом Eloquent. В Laravel 13 это исправлено. - PostgreSQL и смешанные morph-id: PostgreSQL не сравнивает колонки разных типов. Когда
morphToхранит id нескольких типов в одной строковой колонке (uuid и целые числа), фильтры и сортировки через неё приводят id для каждого типа с целочисленным или нативнымuuidпервичным ключом; для строкового ключа тип колонки читается из схемы раз на таблицу и запрос. Include агрегатов под таким типом (withCountсамого Eloquent) падают. - Фильтры и сортировки через morphTo не проверяют, что у каждого перечисленного типа есть колонка; отсутствующая колонка — ошибка SQL. Макросы из callback
constrain()уmorphToв них не воспроизводятся.onlyIncluded()черезmorphTo, подгруженную простой строкой (неRelationship::morphTo()), без morph map оставляет модели, которые фильтр не перечисляет, как есть, вместо того чтобы не загружать ни одну из них. - Алиас корневой таблицы: когда
query()выбирает из алиаса (User::query()->from('users as u')), условие фильтра или сортировки по связи целиком переписывается на алиас: собственный join на корневую таблицу внутри него тоже ссылается на алиас. В Laravel 12 фильтры и сортировки через связь с моделью сSoftDeletesпод таким алиасом падают в самом Eloquent. - PostgreSQL и строковые morph-id:
morphMany/morphOne, у которой колонка id строковая (в ней uuid и целые числа), нельзя загрузить, отфильтровать или посчитать от модели с целочисленным ключом в самом Eloquent (character varying = integer).