Учение Symfony заказывает oneToMany по конкретному заказу - PullRequest
0 голосов
/ 25 июня 2019

Я использую 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 голосов
/ 26 июня 2019

Как отмечено в https://www.doctrine -project.org / projects / doctrine-orm / en / 2.6 / reference / annotations-reference.html # annref_orderby

DQLФрагмент в OrderBy может состоять только из неквалифицированных, не заключенных в кавычки имен полей и необязательного позиционного оператора ASC / DESC.Несколько полей разделяются запятой (,).Названия указанных полей должны существовать в классе targetEntity аннотации @ManyToMany или @OneToMany.

Однако, если вы используете DQL, вы сможете сделать это примерно так:

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

** Я не проверял этот код **

...