我需要创建多年来创建多重搜索。从请求中,我会得到像2017,2018
这样的字符串,然后我想在开始年度和结束年之间获得Questions
的CC_2。我有一部分的查询构建器,我不明白为什么我有这个错误
if ($paramFetcher->get('years')) {
$orXSearch = $qb->expr()->orX();
$yearData = trim($paramFetcher->get('years'));
foreach (explode(',', $yearData) as $key => $id) {
if (!$id) {
continue;
}
$orXSearch
->add($qb->expr()->between('q.createdAt', ':'.$key.'dateFrom', ':'.$key.'dateTo'));
$date = $this->additionalFunction->validateDateTime($id, 'Y');
$first = clone $date;
$first->setDate($date->format('Y'), 1, 1);
$first->setTime(0, 0, 0);
$last = clone $date;
$last->setDate($date->format('Y'), 12, 31);
$last->setTime(23, 59 , 59);
$qb
->setParameter($key.'dateFrom', $first->format('Y-m-d H:i:s'))
->setParameter($key.'dateTo', $last->format('Y-m-d H:i:s'));
}
$qb->andWhere($orXSearch);
}
错误:
symfony Invalid parameter format, : given, but :<name> or ?<num> expected.
在您的 foreach
循环中,您正在循环循环 explode
操作的结果,该操作产生数字数组,即 $key
始终具有数字值。
因此,您的参数占位符为Colon 数字 字符串,即:1dateFrom
。这是不允许的。您要么用Colon String占位符(:foo
(引用字符串值,要么引用具有问号 数字值(?1
(的数字值。
您的问题很容易解决:只需在结肠和数字之间添加任何字母,就很好:
->add($qb->expr()->between(
'q.createdAt',
':x'.$key.'dateFrom',
':x'.$key.'dateTo'
));