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.

Это действительно решает проблему. Однако было бы лучше, если бы прекрасные ребята из Марии могли решить основную ошибку.

Другие вопросы по тегам