Symfony 3 - Doctrine 2 - orderBy on oneToMany 关系不起作用



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

一个Workflow包含许多States

MyBundleEntityWorkflow:
  type: entity
  id:
    id:
      type: integer
      generator: {strategy: AUTO}
  oneToMany:
    states:
      targetEntity: MyBundleEntityState
      mappedBy: workflow
      orderBy:
        stateOrder: ASC
      cascade: [all]
      orphanRemoval: true
      fetch: EAGER
  ...

许多States拿着一个Workflow

MyBundleEntityState:
  type: entity
  id:
    id:
      type: integer
      generator: {strategy: AUTO}
  manyToOne:
    workflow:
      targetEntity: MyBundleEntityWorkflow
      inversedBy: states
      cascade: [persist, merge, refresh]
  ...
  fields:
    stateOrder:
      type: smallint

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

我还尝试了教义官方添加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';

所以排序依据不是查询的一部分...

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

这是一个已知的未解决的问题,orderBy不能与fetch: EAGER结合使用。因此,无论是删除fetch: EAGER还是对教义集进行排序都可以解决问题。

最新更新