smc*_*hae 9 php mysql laravel-5 mysql-5.7
我是 laravel 的新手,我遇到了 DB 问题。
我通过编辑/etc/mysql/my.cnf文件禁用了 'only_full_group_by' sql_mode 。我sql_mode使用SELECT @@GLOBAL.sql_mode;and检查了 global 和 sessionSELECT @@SESSION.sql_mode;并确认sql_mode不再有only_full_group_by.
但是,当我通过邮递员提出请求时,它给了我错误提示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;
Run Code Online (Sandbox Code Playgroud)
Eme*_*bah 10
在 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'));");
Run Code Online (Sandbox Code Playgroud)
小智 9
要回答最初的问题,如果您想在 Laravel 中禁用此功能,您必须在 config/database.php 中的数据库配置中将'strict' 值更改为false。
'connections' => [
...
'mysql' => [
...
'strict' => false,
...
],
]
Run Code Online (Sandbox Code Playgroud)
这是错误的处理方式。您不应该关闭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;
Run Code Online (Sandbox Code Playgroud)
我不知道为什么您尝试关闭严格模式失败,但无论如何您都不应该依赖它。
| 归档时间: |
|
| 查看次数: |
7921 次 |
| 最近记录: |