我使用Symfony 4,并且我有一个OneTomany关系。我想通过特定订单订购此关系。现在,我仅通过ASC订购:
/**
* @ORMOneToMany(targetEntity="AppEntityIngredients", mappedBy="product", fetch="EAGER")
* @ORMOrderBy({"family" = "ASC"})
*/
private $ingredients;
它可以很好地工作。
现在我想按特定顺序订购:"蔬菜","水果"然后"肉"。
我尝试了:
/**
* @ORMOneToMany(targetEntity="AppEntityIngredients", mappedBy="product", fetch="EAGER")
* @ORMOrderBy({"family" = "vegetables, fruits, meat"})
*/
private $ingredients;
当然是行不通的。仍在尝试,但是有一种简单的方法可以实现它吗?
如https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/refereniation/annotations-referentiation.html#annref_orderf_orderby
仅允许Orderby中的DQL片段由未合并的,无引用的字段名称和可选的ASC/DESC位置语句组成。多个字段通过逗号分隔(,(。@manytomany或@Onetomany注释的目标范围必须存在引用的字段名称。
但是,如果您使用DQL,则应该能够使用以下操作来完成此操作:
$qb = $em->getRepository(Ingredients::class)->createQueryBuilder('i');
$results = $qb->orderBy('FIELD(family,vegetables,fruits,meat)')
->getQuery()
->getResults();
**我还没有测试过此代码**