доктрина Symfony: извлечение всех родителей в древовидную структуру в одном запросе

В моем проекте у меня есть несколько сущностей, которые принимают древовидную структуру.
На некоторых объектах я реализовал поведение вложенного набора доктрин, и у меня есть четкая структура родитель-потомок.
В отношении других я определил себя как самоассоциацию, поскольку у меня есть дополнительные поля в таблице «многие ко многим».
Например:

Entity Recipe содержит $ subrecipes
SubRecipe — это новая сущность с параметром под названием вес. SubRecipe $ parentRecipe — это родительский рецепт. SubRecipe $ subRecipe — это дочерний рецепт:

/**
* @ORM\OneToOne(targetEntity="\AppBundle\Entity\FoodAnalytics\Recipe", inversedBy="parentRecipe")
* @ORM\JoinColumn(name="subrecipeId", referencedColumnName="id", nullable=false)
*/
private $subRecipe;

/**
* @ORM\ManyToOne(targetEntity="\AppBundle\Entity\FoodAnalytics\Recipe", inversedBy="subrecipes")
* @ORM\JoinColumn(name="parentRecipeId", referencedColumnName="id", nullable=false, onDelete="cascade")
*/
private $parentRecipe;

Чтобы получить вес Рецепта, я перебираю рецепты, но затем каждый раз запрашиваю базу данных.

Пока что у меня есть:

    foreach($this->getSubrecipes() as $subrecipe)
{
/**
* @var $subrecipe RecipeSubrecipe
*/
$weight += $subrecipe->getSubRecipe()->getWeight();
}

Как я могу предотвратить это и получить дерево ошибок в одном запросе?
Я знаю, что могу сделать самостоятельное присоединение к подрецептам, но как повторить это столько раз, сколько необходимо для получения полного дерева?

    $result = $this
->createQueryBuilder('r')
->leftJoin('r.subrecipes', 's')
->leftJoin('s.subrecipe', 's1')
->leftJoin('s1.subrecipes', 's2')
->leftJoin('s2.subrecipe', 's3')
->...
;

3

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]