作者:Carmen果果时代 | 来源:互联网 | 2023-02-01 22:48
我是Symfony的新手,在运行查询时遇到错误:
public function getFilteredArticles($page, $nbPerPage, $data) {
$query = $this->createQueryBuilder('a')
->leftJoin('a.images', 'i')
->addSelect('i')
->leftJoin('a.type_stockage', 't')
->addSelect('t')
->leftJoin('a.famille', 'f')
->addSelect('f');
if ($data['famille'] != '') {
$query->where('f.id = :famille')
->setParameter('famille', $data['famille']);
}
if ($data['rds'] == false) {
$query->where('a.stock_actuel > 0');
}
if ($data['recherche'] != '' && $data['recherche'] != null) {
$query->where('a.ref_article LIKE :recherche')
->setParameter('recherche', '%' . $data['recherche'] . '%');
}
$query->leftJoin('a.sousfamille', 's')
->orderBy('a.ref_article', 'ASC')
->getQuery();
$query->setFirstResult(($page - 1) * $nbPerPage)
->setMaxResults($nbPerPage);
return new Paginator($query, true);
}
如您所见,此查询具有条件参数,它返回表所需的文章列表.但是,当我运行此查询来填充我的表时,我得到了错误:
在渲染模板期间抛出异常("太多参数:查询定义0个参数,你绑定1").
我不知道他为什么期待0个参数.我尝试使用setParameters,但结果是一样的.
有没有人有想法?
1> goto..:
您应该使用andWhere()
方法而不是where()
.
where()
方法删除所有以前的位置,但setParameter()
不删除.这就是他找到比where子句更多参数的原因.
我个人从不使用,where
如果条件没有意义成为第一个条件,以避免这种错误.
if ($data['famille'] != '') {
$query->andWhere('f.id = :famille')
->setParameter('famille', $data['famille']);
}
if ($data['rds'] == false) {
$query->andWhere('a.stock_actuel > 0');
}
if ($data['recherche'] != '' && $data['recherche'] != null) {
$query->andWhere('a.ref_article LIKE :recherche')
->setParameter('recherche', '%' . $data['recherche'] . '%');
}
where()
php doc
指定查询结果的一个或多个限制.
替换任何先前指定的限制(如果有).
andWhere()
php doc
向查询结果添加一个或多个限制,与之前指定的任何限制形成逻辑关联.