0

これが私のコードです

if(!$criteria){
            return null;
        }

        $em = $this->doctrine->getEntityManagerForClass('Sample\MyBundle\Entity\Call');
        $qb = $em->createQueryBuilder();
        $qb->add('select', 'c')->add('from', 'Sample\MyBundle\Entity\Call c');

        if($criteria->getReason() && $criteria->getReason() != null){
            $qb->add('where', 'c.reason = ?1');
            $qb->setParameter(1, $criteria->getReason());
        }
        if($criteria->getCallDate() && $criteria->getCallDate() != null){
            $qb->add('where', 'c.callTime = ?2');
            $qb->setParameter(2, $criteria->getCallDate());
        }

        if($criteria->getPage()>1){
            $qb->setFirstResult(($criteria->getPage()-1) * 10)->setMaxResults(10);
        }

        $query = $qb->getQuery();
        return $query->getResult();

このエラーが発生しました - Invalid parameter number: number of bound variables does not match number of tokensGoogle で検索しましたが、解決策が見つかりませんでした。これには助けが必要です。

条件付きチェック if ステートメントの後に両方の setParameter() 呼び出しを入れようとしましたが、同じエラーが発生します。2 番目のパラメーターを設定せず、2 番目の where 条件を削除すると、機能します。

4

1 に答える 1

0

ああ、私は間違いを犯していたと思います。「add」機能で複数の「where」を使用することはできないと思います。私はそれを交換し$qb->andWhere('c.callTime > ?2');、今では正常に動作します。

于 2012-08-17T19:51:55.897 に答える