【问题标题】:Syntax Error: line 0, col 95: Error: Expected Literal, got ''语法错误:第 0 行,第 95 列:错误:预期文字,得到 ''
【发布时间】:2017-12-08 19:30:21
【问题描述】:

当我尝试执行以下查询时收到[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;

以为是数据类型的问题,但我真的找不到问题所在。

【问题讨论】:

  • 什么是$category
  • $category 是我设置为方法参数的变量
  • public function getAvecCategory($category){ $qb = $this->createQueryBuilder('a'); $qb->join('a.categories', 'cat')->where($qb->expr()->in('cat.name', $category)); return $qb->getQuery()->getResult(); }
  • 对不起,我的意思是:什么包含$category:id、Object、类别名称?
  • 类别名称。我认为这就是问题所在,但即使它是一个 id,我也会收到一个错误页面

标签: symfony doctrine-orm query-builder


【解决方案1】:

您必须使用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();

【讨论】:

    猜你喜欢
    • 2014-03-03
    • 2016-11-09
    • 1970-01-01
    • 2018-12-18
    • 2019-12-20
    • 2021-07-23
    • 1970-01-01
    • 2019-01-24
    • 1970-01-01
    相关资源
    最近更新 更多