当我尝试执行以下查询时,我收到[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;
认为这是数据类型的问题,但我真的找不到什么问题。
答案 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();