Symfony2和Doctrine – 错误:PathExpression无效。 必须是StateFieldPathExpression

我有一个像这样的实体:

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

我试图运行这样的查询:

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

但是,我收到以下错误:

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

如何从我的表中selectparent_id字段。 我已经尝试了一堆的变化,即使我做这样的事情:

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

除了 parent_id,我得到表中的所有字段。 这似乎是教条正在阻碍。 我如何查询这个parent_id字段? 或者更好,但我怎么能得到表中的所有领域,包括parent_id

您可以使用当前未logging的IDENTITY函数在查询中selectFK ID:

 SELECT IDENTITY(c.parent) ... 

使用createQueryBuilder的解决scheme:

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

您正在select一个未join的对象。 就像在另一个答案中说的,你必须做一些事情:

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