Symfony2 y Doctrine – Error: PathExpression no válido. Debe ser StateFieldPathExpression

Tengo una entidad que se ve así:

/** * @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; } 

y estoy tratando de ejecutar una consulta como esta:

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

Sin embargo, recibo el siguiente error:

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

¿Cómo puedo seleccionar el campo parent_id de mi tabla? He intentado un montón de variaciones e incluso si hago algo como esto:

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

Obtengo todos los campos en la tabla a excepción del parent_id. Parece que Doctrina se interpone en el camino. ¿Cómo puedo consultar este campo parent_id? o mejor aún ¿cómo puedo obtener todos los campos en la tabla incluyendo el parent_id

Puede usar la función IDENTITY actualmente no documentada para seleccionar los ID de FK en una consulta:

 SELECT IDENTITY(c.parent) ... 

Solución usando createQueryBuilder:

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

Está seleccionando un objeto que no está unido. Como se dijo en otra respuesta, tienes que hacer algo como:

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