J'ai une structure arborescente avec un champ parent. Actuellement, je suis en train d'essayer d'obtenir tous les nœuds parents pour afficher le chemin d'accès du nœud actuel.
Fondamentalement, je suis en train de faire un boucle pour traiter tous les nœuds.
$current = $node->getParent();
while($current) {
// do something
$current = $current->getParent();
}
À l'aide de la valeur par défaut findById
méthode fonctionne. Parce que l'entité a certains des champs agrégés, je suis en utilisant une mesure de référentiel méthode pour charger tous les champs de base avec une seule requête.
public function findNodeByIdWithMeta($id) {
return $this->getEntityManager()
->createQuery('
SELECT p, a, c, cc, ca, pp FROM
TestingNestedObjectBundle:NestedObject p
JOIN p.actions a
LEFT JOIN p.children c
LEFT JOIN c.children cc
LEFT JOIN c.actions ca
LEFT JOIN p.parent pp
WHERE p.id = :id
')
->setParameter('id', $id)
->setHint(
\Doctrine\ORM\Query::HINT_CUSTOM_OUTPUT_WALKER,
'Gedmo\\Translatable\\Query\\TreeWalker\\TranslationWalker'
)
->getOneOrNullResult();
}
Avec ce code, le chargement des parents échoue. Je ne reçois que le parent immédiat (adressée par LEFT JOIN p.parent pp
), mais pas les parents ci-dessus. E. g. $node->getParent()->getParent()
retours null
.
Quoi de mal avec mon code? Ai-je mal compris le chargement paresseux chose?
Merci beaucoup, Hacksteak