语法错误:第0行,第95行:错误:预期的文字,得到''

时间:2017-07-05 08:35:15

标签: symfony doctrine-orm query-builder

当我尝试执行以下查询时,我收到[Syntax Error] line 0, col 95: Error: Expected Literal, got 'value'错误:

    $qb = $this->createQueryBuilder('a');
    $qb
       ->join('a.categories', 'cat')
       ->where($qb->expr()->in('cat.name', $category));
    return $qb->getQuery()->getResult();

映射字段如下:

/**
 * @ORM\ManyToMany(targetEntity="Camten\TestBundle\Entity\Category", cascade={"persist"}, inversedBy="articles")
 */
 private $categories;

认为这是数据类型的问题,但我真的找不到什么问题。

1 个答案:

答案 0 :(得分:0)

您必须使用setParameter()将参数绑定到dql变量 见下文,

qb = $this->createQueryBuilder('a');

$qb
   ->join('a.categories', 'cat')
   ->where('cat.name = :nameParam') 
   ->setParameter('nameParam', $category);
return $qb->getQuery()->getResult();

(我将其命名为nameParam以表明它与cat.name无关)

如果您想使用$qb->expr()-> *方法,则应使用eq()而不是in()

qb = $this->createQueryBuilder('a');

$qb
   ->join('a.categories', 'cat')
   ->where($qb->expr()->eq('cat.name',':nameParam'))
   ->setParameter('nameParam', $category);
return $qb->getQuery()->getResult();