古いバージョンの DoctrineExtension.Tree を使用していますが、buildTree がありません。同じことをしたいのですが、問題が発生し続けます。findHierarchy(以下を参照)を使用して、階層内のすべての子を反復するたびに、すべてが2回取得されます。Doctrine は引き続き子を検索するためのクエリを実行するため (find Hierarchy にそれらをロードしたにもかかわらず)、ここにいくつかの便利なコードがあります:
私のエンティティの2つの機能
/**
* Add children
*
* @param BGCom\MontreuxBundle\Entity\Category $children
*/
public function addChildren(\BGCom\MontreuxBundle\Entity\Category $children)
{
$children->setParent($this);
$this->children[] = $children;
}
/**
* Get children
*
* @return Doctrine\Common\Collections\Collection
*/
public function getChildren()
{
return $this->children;
}
私のレポで階層を見つけます:
public function findHierarchy() {
$qb = $this
->createQueryBuilder('node')
->where('node.lvl < 2')
->andWhere('node.in_menu = 1')
->orderBy('node.root, node.lvl', 'ASC');
// set hint to translate nodes
$query = $qb->getQuery()->setHint(
Query::HINT_CUSTOM_OUTPUT_WALKER,
'Gedmo\\Translatable\\Query\\TreeWalker\\TranslationWalker'
);
$res = $query->getResult();
//Now build the right entity
// build tree in english
$i = 0;
$j = 0;
// We rebuild the tree
$parent = array();
while($i < count($res)) {
$cur = $res[$i];
$parent[] = $cur;
$i++;
while ($i < count($res) && $res[$i]->getRoot() === $cur->getId()) {
$cur->addChildren($res[$i]);
$i++;
}
}
return $parent;
}
私の見解:
{% for root in trees %}
<li>
<a href="{{ category_path(root) }}">{{ root.name }}</a>
<div class="box blue-gradient">
<ul class="lvl1">
{% for twig in root.getChildren() %}
<li><a href="{{ category_path(twig)}}">
{{ twig.name }}
</a></li>
{% endfor %}
</ul>
</div>
</li>
{% endfor %}
明確にするために:一部の子がエンティティに既に存在する場合、ドクトリンがクエリを実行しないようにする方法はありますか?
助けてくれてどうもありがとう