Symfony 3 - Doctrine 2 - 在 oneToMany 关系上的 orderBy 不起作用

Posted

技术标签:

【中文标题】Symfony 3 - Doctrine 2 - 在 oneToMany 关系上的 orderBy 不起作用【英文标题】:Symfony 3 - Doctrine 2 - orderBy on oneToMany relation does not work 【发布时间】:2017-11-06 08:36:12 【问题描述】:

我在两个实体之间有一个非常简单的oneToMany/manyToOne 关系:

一个Workflow拥有多个States

MyBundle\Entity\Workflow:
  type: entity
  id:
    id:
      type: integer
      generator: strategy: AUTO
  oneToMany:
    states:
      targetEntity: MyBundle\Entity\State
      mappedBy: workflow
      orderBy:
        stateOrder: ASC
      cascade: [all]
      orphanRemoval: true
      fetch: EAGER
  ...

很多States拿着一个Workflow

MyBundle\Entity\State:
  type: entity
  id:
    id:
      type: integer
      generator: strategy: AUTO
  manyToOne:
    workflow:
      targetEntity: MyBundle\Entity\Workflow
      inversedBy: states
      cascade: [persist, merge, refresh]
  ...
  fields:
    stateOrder:
      type: smallint

但是orderBy: ASCorderBy: DESC 都没有命令状态。我跑了php bin/console doctrine:schema:update --force --complete --dump-sql,在更改选项时清除了缓存并重新启动了apache。

我还尝试doctrines official way 添加orderBy 选项:orderBy: 'stateOrder': 'DESC' / orderBy: 'stateOrder': 'ASC' 得到相同的结果...


这是呈现表单时运行的查询:

SELECT 
  t0.id AS id_1, 
  t0.name AS name_2, 
  t0.project_id AS project_id_3, 
  t4.id AS id_5, 
  t4.stateOrder AS stateOrder_6, 
  t4.workflow_id AS workflow_id_7, 
  t8.id AS id_9, 
  t8.keyWord AS keyWord_10, 
  t8.action AS action_11, 
  t8.workflow_id AS workflow_id_12, 
  t8.from_id AS from_id_13, 
  t8.to_id AS to_id_14, 
  t0.initialState_id AS initialState_id_15 
FROM 
  workflow_Workflow t0 
  LEFT JOIN workflow_State t4 ON t4.workflow_id = t0.id 
  LEFT JOIN workflow_Transition t8 ON t8.workflow_id = t0.id 
WHERE 
  t0.id = '10';

所以 order by 不是查询的一部分...

任何建议为什么这不起作用?

【问题讨论】:

您是否使用特殊查询获取这些实体?如果是这样:State 实体是否已加入? 另外:DDC-3448 可能是相关的。 不,实体由 Symfonys ParamConverter 自动加载...但我在 github 上发现了问题:orderBy 不适用于 EAGER!。无论如何,谢谢...(您可以更快地找到问题!谢谢) 【参考方案1】:

众所周知,open issueorderBy 不能与 fetch: EAGER 结合使用。所以要么删除fetch: EAGER 或sorting the doctrine collection 解决问题。

【讨论】:

以上是关于Symfony 3 - Doctrine 2 - 在 oneToMany 关系上的 orderBy 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Symfony 3 - Doctrine 2 - 在 oneToMany 关系上的 orderBy 不起作用

Symfony 2 + Doctrine 2 + PHPUnit 3.5:闭包异常的序列化

Symfony2 2.3.7 -Doctrine 2.4.1:ManyToMany 关系未保存到数据库

Symfony 3.4没有元数据类来处理错误

Symfony 3 Doctrine 2中不存在属性

Symfony 3.3 Doctrine Fixtures 加载跳过 SQL 视图