Symfony2 et Docsortingne – Erreur: PathExpression non valide. Doit être un StateFieldPathExpression

J’ai une entité qui ressemble à ceci:

/** * @Gedmo\Tree(type="nested") * @ORM\Table(name="categories") * @ORM\Entity() */ class Category extends BaseCategory { /** * @ORM\OneToMany(targetEntity="Category", mappedBy="parent") */ protected $children; /** * @Gedmo\TreeParent * @ORM\ManyToOne(targetEntity="Category", inversedBy="children") * @ORM\JoinColumn(name="parent_id", referencedColumnName="id", onDelete="SET NULL") */ protected $parent; } 

et j’essaie d’exécuter une requête comme celle-ci:

 $qb = $this->em->createQueryBuilder() ->select('c.parent') ->from('Category', 'c'); $result = $qb->getQuery()->getArrayResult(); 

Cependant, je reçois l’erreur suivante:

 [Semantical Error] ... Error: Invalid PathExpression. Must be a StateFieldPathExpression. 

Comment puis-je sélectionner le champ parent_id de ma table? J’ai essayé un tas de variations et même si je fais quelque chose comme ça:

 $qb = $this->em->createQueryBuilder() ->select('c') ->from('Category', 'c'); 

Je reçois tous les champs de la table à l’ exception de parent_id. Cela semble être comme si Docsortingne faisait obstacle. Comment puis-je interroger ce champ parent_id? ou mieux encore comment puis-je obtenir tous les champs de la table, y compris le parent_id

Vous pouvez utiliser la fonction IDENTITY actuellement non documentée pour sélectionner les ID FK dans une requête:

 SELECT IDENTITY(c.parent) ... 

Solution utilisant createQueryBuilder:

 $query->SELECT('pa.id') ->from('Category', 'ca'); $query->join('ca.parent', 'pa'); $result = $query->getQuery()->getArrayResult(); 

Vous sélectionnez un object qui n’est pas joint. Comme dit dans une autre réponse, vous devez faire quelque chose comme:

 qb->innerJoin("c.parent", "p")