Laravel и CTE
Я пытаюсь преобразовать следующий SQL-запрос в код Laravel, используя пакет laravel-cte taudenmeirs.
WITH `cte` AS (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY channel_id ORDER BY created_at DESC) AS row_number
FROM `Videos`
)
SELECT `Channels`.*, `cte`.*
FROM `Channels`
LEFT JOIN `cte`
ON `Channels`.`id` = `cte`.`channel_id`
WHERE `cte`.`row_number` = 1;
Проблема в том, что я продолжаю получать следующий ответ от сервера:
Illuminate\Database\QueryException: SQLSTATE[42000]: синтаксическая ошибка или нарушение прав доступа: 1140 Смешивание столбцов GROUP (MIN(),MAX(),COUNT(),...) без столбцов GROUP недопустимо, если нет GROUP Предложение BY (SQL: cte as (select , ROW_NUMBER() OVER (PARTITION BY channel_id ORDER BY created_at DESC) AS row_number из видео) выберите каналы. Из каналов слева соедините cte на Channels.id = cte.channel_id, где cte.rn = 1) в файле /Users/mark/Workspace/api.site/vendor/laravel/framework/src/Illuminate/Database/Connection.php в строке 665
1 ответ
Я действительно получил этот ответ от taudenmeirs на github, где я представил эту проблему как ошибку. Оказывается, ошибка вызвана ошибкой в MariaDB: https://jira.mariadb.org/browse/MDEV-17785
В ONLY_FULL_GROUP_BY
режим включен в Laravel по умолчанию. Вы можете отключить его, установив'strict' => false
в вашем файле config/database.php.
Это действительно решает проблему. Однако было бы лучше, если бы прекрасные ребята из Марии могли решить основную ошибку.