Symfony主义命令oneToMany由特定命令

时间:2019-06-25 13:19:07

标签: symfony doctrine-orm

我使用Symfony 4,并且我有一个OneToMany关系。我想按特定顺序订购此关系。目前,我仅按ASC订购:

/**
 * @ORM\OneToMany(targetEntity="App\Entity\Ingredients", mappedBy="product", fetch="EAGER")
 * @ORM\OrderBy({"family" = "ASC"})
 */
private $ingredients;

它完美地工作。

现在,我想按特定的顺序排序:“蔬菜”,“水果”,然后是“肉”。

我尝试过:

/**
 * @ORM\OneToMany(targetEntity="App\Entity\Ingredients", mappedBy="product", fetch="EAGER")
 * @ORM\OrderBy({"family" = "vegetables, fruits, meat"})
 */
private $ingredients;

这当然是行不通的。仍在尝试,但是有一种简单的方法可以实现吗?

1 个答案:

答案 0 :(得分:0)

https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/annotations-reference.html#annref_orderby

中所述
  

仅允许OrderBy中的DQL代码段包含不合格,未加引号的字段名称以及可选的ASC / DESC位置声明。多个字段用逗号(,)分隔。引用的字段名称必须存在于@ManyToMany或@OneToMany批注的targetEntity类上。

但是,如果您使用DQL,则应该可以通过以下方式完成此操作:

$qb = $em->getRepository(Ingredients::class)->createQueryBuilder('i');
$results = $qb->orderBy('FIELD(family,vegetables,fruits,meat)')
              ->getQuery()
              ->getResults();

**我尚未测试此代码**