符号无效的参数格式:给定



我需要创建多年来创建多重搜索。从请求中,我会得到像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'
));

相关内容

  • 没有找到相关文章

最新更新