Symfony参数格式无效,:给定

时间:2018-02-12 19:08:18

标签: symfony doctrine-orm

我需要多年创建多次搜索。根据请求,我会收到2017,2018这样的字符串,然后我希望从开始年份和结束年份之间得到Questions createdAt。我有部分查询构建器,我不明白为什么我有这个错误

        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.

1 个答案:

答案 0 :(得分:3)

foreach循环中,您循环遍历explode操作的结果,该操作会生成数字数组,即$key将始终具有数值。

因此,您的参数占位符为冒号+数字+字符串,即:1dateFrom。这是不允许的。要么使用冒号+字符串占位符(:foo)引用字符串值,要么引用带有问号+数字值(?1)的数值。

您的问题很容易解决:只需在冒号和数字之间添加任何字母,就可以了:

->add($qb->expr()->between(
    'q.createdAt',
    ':x'.$key.'dateFrom',
    ':x'.$key.'dateTo'
));