错误:无效的路径表达式。必须是 StateFieldPathExpression。

Posted

技术标签:

【中文标题】错误:无效的路径表达式。必须是 StateFieldPathExpression。【英文标题】:Error: Invalid PathExpression. Must be a StateFieldPathExpression. 【发布时间】:2016-03-28 06:13:00 【问题描述】:

我正在开发一个带有查询构建器的 symfony 项目实体。当我尝试运行此功能时,我遇到了这个问题。

[语义错误] 第 0 行,第 9 列靠近“类别 FROM”:

public function json_filterAllproductsAction() 

    $search = "";
    $category = 1;

    //Combine tables and create the query with querybuilder
    $em = $this->container->get('doctrine.orm.entity_manager');

    $qb = $em->createQueryBuilder();

    $qb->select('p.category')
            ->from('EagleAdminBundle:Products', 'p')
            ->orderBy('p.id', 'DESC');
    if ($category != 0) 
        $qb->andWhere('p.category = :category')
                ->setParameter('category', $category);
    
    $qb->andWhere('p.productTitle LIKE :title')
            ->setParameter('title', "$search%");

    //convert to json using "JMSSerializerBundle"
    $serializer = $this->container->get('serializer');
    $jsonproducts = $serializer->serialize($qb->getQuery()->getResult(), 'json');
    return new Response($jsonproducts);

我认为是错误,

$qb->select('p.category')

如果有人可以帮助我,那将是很大的帮助。

【问题讨论】:

【参考方案1】:

您还需要在加入时获取类别。像这样的东西应该可以正常工作:

    $qb->select('p', 'c')
        ->from('EagleAdminBundle:Products', 'p')
        ->orderBy('p.id', 'DESC')
        ->join('p.category', 'c');

    if ($category != 0) 

        $qb->andWhere('p.category = :category')
            ->setParameter('category', $category);
    

    $qb->andWhere('p.productTitle LIKE :title')
        ->setParameter('title', "$search%");

请注意,如果您不想将搜索限制为仅具有类别的产品,您可以将联接更改为 leftJoin。

还请注意,您可以将序列化程序配置为序列化产品的类别属性。然后你应该能够获取一个产品并让它为你自动序列化类别。

【讨论】:

嗨,我试过了,但我只需要类别 ($qb->select('c'))。当我尝试做这些时,我遇到了这个问题。 [Semantical Error] line 0, col -1 near 'SELECT c FROM': Error: Cannot select entity through identification variables without choosing at least one root entity alias.。并且产品表具有类别表的外键 抱歉回复慢了,休假去了。您可以选择类别作为根别名 (->from('EagleAdminBundle:Category', 'c') 然后将产品加入到该别名中以通过产品标题限制您的查询 (->join('c.products', 'p') ,那么应该可以正常工作。

以上是关于错误:无效的路径表达式。必须是 StateFieldPathExpression。的主要内容,如果未能解决你的问题,请参考以下文章

RangeError,语法错误:无效的正则表达式

图片路径无效 - 未找到图片

解决find命令报错:路径必须在表达式之前

无效路径参数/查询参数的错误代码应该是啥[重复]

ORA-39001: 参数值无效 ORA-39000: 转储文件说明错误 ORA-39088: 文件名不能包含路径说明 。啥情况啊?

find 命令提示:路径必须在表达式之前