1

Doctrine 2 を使用して、別のユーザーの連絡先であるユーザーを取得したいと考えています。テーブルuserには、これらのユーザー間のマッピングが含まれています。関数内のクエリは次のエラーを返します。

パラメータ番号が無効です: バインドされた変数の数がトークンの数と一致しません。

ただし、私の理解$strでは、「b」に$ownerId設定され、「2」に設定されており、両方がsetParameters関数によって割り当てられています。

 protected function getContactBySubstring($str, $ownerId) {
        echo $str;
        echo $ownerId;
        $em = $this->getDoctrine()->getEntityManager();
        $qb = $em->createQueryBuilder();
        $qb->add('select', 'u')
                ->add('from', '\Paston\VerBundle\Entity\User u, \Paston\VerBundle\Entity\Contact c')
                ->add('where', "c.owner = ?1 AND c.contact = u.id AND u.username LIKE '?2'")
                ->add('orderBy', 'u.firstname ASC, u.lastname ASC')
                ->setParameters(array (1=> $ownerId, 2=> '%'.$str.'%'));

        echo $qb->getDql();
        $query = $qb->getQuery();
        $users = $query->getResult();
        foreach($users as $user)
            echo $user->getUsername();
        exit;
        //return $contacts;
    }
4

1 に答える 1

16

クエリ テキスト内のパラメータを引用符で囲まないでください。

->add('where', "c.owner = ?1 AND c.contact = u.id AND u.username LIKE '?2'")

する必要があります

->add('where', "c.owner = ?1 AND c.contact = u.id AND u.username LIKE ?2")
于 2012-06-20T21:40:03.340 に答える