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

Symfony 错误:路径表达式无效。必须是StateFieldPathExpression。,symfony,doctrine,doctrine-query,Symfony,Doctrine,Doctrine Query,我正在使用查询生成器处理一个symfony项目实体。当我尝试运行这个函数时,我遇到了这个问题 [语义错误]第0行,第9列“类别来源”附近:错误:无效的PathExpression。必须是StateFieldPathExpression 我认为错误在于 $qb->选择('p.category') 如果有人能帮助我,那将是巨大的帮助 您还需要在加入时获取类别。像这样的方法应该可以很好地工作: $qb->select('p', 'c') ->from('EagleA

我正在使用查询生成器处理一个symfony项目实体。当我尝试运行这个函数时,我遇到了这个问题

[语义错误]第0行,第9列“类别来源”附近:错误:无效的PathExpression。必须是StateFieldPathExpression

我认为错误在于

$qb->选择('p.category')


如果有人能帮助我,那将是巨大的帮助

您还需要在加入时获取类别。像这样的方法应该可以很好地工作:

    $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


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

您好,我尝试过这个,但我只需要类别($qb->select('c'))。当我尝试这样做时,我遇到了这个问题<代码>[Semantic Error]第0行,第1列“从中选择c”:错误:如果不选择至少一个根实体别名,则无法通过标识变量选择实体。。而产品表中有一个外键来分类表,担心回复速度慢,已经外出度假了。您可以选择category作为根别名(->from('EagleAdminBundle:category','c'),然后将产品连接到该别名,以按产品标题限制查询(->join('c.products','p'),这样应该可以正常工作。
    $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%");