symfony doctrine:在一个查询中检索树状结构上的所有父项

时间:2014-12-17 15:55:03

标签: php symfony doctrine-orm tree nested

在我的项目中,我有几个采用树状结构的实体。 在某些实体上,我实现了教义嵌套集行为,并且我有一个明确的父子结构。 在其他人身上,我将自己定义为自我关联,因为我在多对多的表格中有额外的字段。 例如:

实体食谱有$ subrecipes SubRecipe是一个新实体,其参数称为weight。 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();
    }

如何在一个查询中阻止并检索wole树? 我知道我可以在subrecipes上自我加入但是如何根据需要多次重复这个以获得完整的树?

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

0 个答案:

没有答案