如何在laravel中禁用only\u full\u group\u by选项

j2cgzkjk  于 2021-06-21  发布在  Mysql
关注(0)|答案(4)|浏览(397)

我是新来拉雷维尔,我有一个问题与数据库的问题。
我已通过编辑禁用“only\ full\ group\ by”sql\模式 /etc/mysql/my.cnf 文件。我查过了 sql_mode 对于全局和会话使用 SELECT @@GLOBAL.sql_mode; 以及 SELECT @@SESSION.sql_mode; 并证实 sql_mode 再也没有了 only_full_group_by .
然而,当我通过 Postman 提出请求时,它给了我一个错误的说法 this is incompatible with sql_mode=only_full_group_by .
我很困惑。为什么即使在我改变之后也会出现这个错误 sql_mode ? 我做错什么了吗?
如有任何建议,将不胜感激。
谢谢您。
使用tosql()的sql

select A.* 
from `A` 
inner join `B` on `A`.`id` = `B`.`a_id` 
inner join `C` on `C`.`id` = `B`.`c_id` 
group by `A`.`id` having COUNT(A.id) > 0;
6pp0gazn

6pp0gazn1#

这样做是不对的。而不是关机 only_full_group_by 模式下,您应该修复查询,以便它不会破坏mysql:

SELECT a1.*
FROM A a1
INNER JOIN
(
    SELECT A.id
    FROM A
    INNER JOIN B
        ON A.id = B.a_id 
    INNER JOIN C
        ON C.id = B.c_id
    GROUP BY A.id
    HAVING COUNT(A.id) > 0
) a2
    ON a1.id = a2.id;

我不知道为什么你关闭严格模式的尝试失败了,但无论如何你都不应该依赖它。

huus2vyu

huus2vyu2#

要回答最初的问题,如果您想在laravel中禁用此功能,您必须在config/database.php中的数据库配置中将“strict”值更改为false。

'connections' => [
...

    'mysql' => [
    ...
        'strict' => false,
        ...

    ],

]
tjjdgumg

tjjdgumg3#

将此模式添加到config/database.php

'mysql' => [
 ...
        'modes' => [
            'STRICT_ALL_TABLES',
        ],
],

如果你设置 'strict' => true . 一些sql异常不会像sql数据完整性异常那样抛出。

2cmtqfgy

2cmtqfgy4#

在laravel中,您可以在运行时执行此操作,而不是进行全局设置

//disable ONLY_FULL_GROUP_BY
DB::statement("SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));");

//Your SQL goes here - The one throwing the error (:

//re-enable ONLY_FULL_GROUP_BY
DB::statement("SET sql_mode=(SELECT CONCAT(@@sql_mode, ',ONLY_FULL_GROUP_BY'));");

相关问题