Symfony2中和学说 - 错误:无效PathExpression。 必须是一个StateFi

2019-07-17 23:35发布

我有一个看起来像这样的实体:

/**
 * @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. 

我怎样才能从我的表中选择PARENT_ID领域。 我已经尝试了一堆即使我不喜欢这样的变化和:

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

我拿到表中的所有领域除了 PARENT_ID。 这似乎是教条的方式获得。 我怎样才能查询该PARENT_ID领域? 或更好,但我怎样才能在表中的所有领域,包括PARENT_ID

Answer 1:

你可以使用目前的无证IDENTITY函数在查询中选择FK标识:

SELECT IDENTITY(c.parent) ...


Answer 2:

使用createQueryBuilder解决方案:

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

$result = $query->getQuery()->getArrayResult();


Answer 3:

你是选择在未加入的对象。 置身于另一个回答说,你必须做一些事情,如:

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


文章来源: Symfony2 and Doctrine - Error: Invalid PathExpression. Must be a StateFieldPathExpression