Laravel 和 CTE

Laravel and CTE's

我正在尝试使用 taudenmeirs 的 laravel-cte 包将以下 SQL 查询转换为 Laravel 代码。

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]: Syntax error or access violation: 1140 Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause (SQL: with cte as (select , ROW_NUMBER() OVER (PARTITION BY channel_id ORDER BY created_at DESC) AS row_number from Videos) select Channels. from Channels left join cte on Channels.id = cte.channel_id where cte.rn = 1) in file /Users/mark/Workspace/api.site/vendor/laravel/framework/src/Illuminate/Database/Connection.php on line 665

我实际上是在 github 上从 taudenmeirs 那里得到这个答案的,我把这个问题作为一个错误提交了。原来这个错误是由MariaDB中的一个bug引起的:https://jira.mariadb.org/browse/MDEV-17785

ONLY_FULL_GROUP_BY 模式默认在 Laravel 中启用。您可以通过在 config/database.php 文件中设置 'strict' => false 来禁用它。

这确实解决了问题。但是,如果 Maria 的优秀人员能够解决潜在的错误,那就更好了。