【问题标题】:Doctrine2 Symfony2 Paginator fails with orderByDoctrine2 Symfony2 分页器因 orderBy 失败
【发布时间】:2016-02-27 06:45:25
【问题描述】:

在回购中使用此代码

 $builder = $this->createQueryBuilder("s");

 $builder->addOrderBy("s.name", "ASC");

 $pagi = new Paginator($builder->getQuery(), true);

 $data = $pagi->getIterator()->getArrayCopy();

导致此错误

SQLSTATE[HY000]:一般错误:ORDER BY 子句的 3065 表达式 #1 不在 SELECT 列表中,引用列 'dctrn_result.name_5' 不在 SELECT 列表中;这与 DISTINCT") 不兼容 AppBundle:Schools/Search:results_list.html.twig 在第 33 行。

names 表的有效列名。这确实有效,但转移到新机器并安装新版本的 MySQL 完全打破了这一点。这个问题有一些参考http://www.doctrine-project.org/jira/browse/DDC-1800

但除了删除同样失败的 s. 之外没有其他实际解决方案

 $builder->addOrderBy("name", "ASC");

我完全不知道该做什么,因为这似乎是 Doctrine2 分页器中的一个相当大的问题。

我使用的是 MySQL 5.7.9。

【问题讨论】:

    标签: php mysql symfony doctrine-orm


    【解决方案1】:

    对于给定的错误,明确的选择语句应该可以完成这项工作。

     $builder = $this->createQueryBuilder("s");
     $builder->select("s")
             ->orderBy("s.name", "ASC");
    

    但如果您想在许多不同的情况下使用分页,我建议您使用KnpPaginatorBundle。该组件更灵活。

    【讨论】:

    • 谢谢。对该捆绑包的重构工作也很简单。
    【解决方案2】:

    我认为你必须将你的 mySql 版本降级到 5.6

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-22
      • 1970-01-01
      • 2012-11-21
      • 2019-04-25
      • 2015-10-04
      • 2019-05-14
      • 2017-10-09
      • 2014-10-06
      相关资源
      最近更新 更多