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

vim*_*uth 4 doctrine doctrine-query symfony

我正在使用 query builder处理一个symfony 项目实体。当我尝试运行此功能时,出现此问题。

[语义错误] 'category FROM' 附近的第 0 行第 9 列:错误:无效的 PathExpression。必须是 StateFieldPathExpression。

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);
}
Run Code Online (Sandbox Code Playgroud)

我认为错误在于,

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

有人可以帮助我将是很大的帮助。

Ric*_*ard 5

您还需要在加入中获取类别。这样的事情应该可以正常工作:

    $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%");
Run Code Online (Sandbox Code Playgroud)

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

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