Mysql Symfony查询,仅\u FULL\u GROUP\u BY打开

Mysql Symfony查询,仅\u FULL\u GROUP\u BY打开,mysql,symfony,doctrine-orm,group-by,Mysql,Symfony,Doctrine Orm,Group By,我想检索一个对象集合,作为按名称分组的城市的结果,我的查询是 public function getDistinctCitiesName() { $qb = $this->createQueryBuilder("cc"); ->add('groupBy', 'cc.name'); return $qb; } 运行时,我有一个异常 request.CRITICAL:未捕获的PHP异常 条令\DBAL\Exception\DriverExcep

我想检索一个对象集合,作为按名称分组的城市的结果,我的查询是

public function getDistinctCitiesName()
{
    $qb = $this->createQueryBuilder("cc");
            ->add('groupBy', 'cc.name');

    return $qb;
}
运行时,我有一个异常

request.CRITICAL:未捕获的PHP异常 条令\DBAL\Exception\DriverException:在 执行“选择c0\u0.id作为id\u0,c0\u0.name作为名称\u1,c0\u0.postal\u代码” 邮政编码为2,c0国家为3,c0国家为4, c0_u.可视为可视的c0_u5从城市c0_u组按c0_u.名称': SQLSTATE[42000]:语法错误或访问冲突:1055表达式1 of SELECT列表不在GROUP BY子句中,并且包含未聚合的 列“www.c0_u2;u.id”,它在功能上不依赖于中的列 分组条款;这是不符合的 sql\u模式=仅\u完整\u组\u由


我无法按模式禁用唯一的\u full\u group\u,因此有解决方案吗

您需要从mySQL中仅禁用\u FULL\u GROUP\u BY来消除此异常。 您有两个选择:-

1:-在条令配置中禁用它

options:
    1002: 'SET sql_mode=(SELECT REPLACE(@@sql_mode, "ONLY_FULL_GROUP_BY", ""))'
如果您将此添加到条令配置中,您将不再获得异常

2:-在mySQL中禁用它 在mysql控制台中运行以下命令

mysql > SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
或者从phpmyadmin中删除它

这是我对这个话题的看法。你可以检查它并分享你的评论


谢谢

您的查询不包含任何聚合列,不允许进入模式。考虑重写查询,以包含聚合,谢谢,但是重写查询不会返回ObjQuerQuy上的集合,聚合并不意味着返回表的完整行,而是关于SQL,而不是原则。试着想想你的目标,这个groupBy子句到底想要实现什么?我需要一个集合来在表单字段“query\u builder”中使用它。实际上,这不是一个限制,而是关系数据库工作的一种方式。我建议您更新查询以使用select distinct和fetch单列值,以避免在应用程序中加载不必要的数据在条令配置中添加1002选项可以正常工作!谢谢我的问题是,为什么选择这个选项?此修改是否会导致其他问题?