これは単純なはずですが、実際の例が見つかりません。 「無効なパラメーター番号:バインドされた変数の数がトークンの数と一致しません」というエラーをスローするコントローラーメソッドを次に示します。 「searchterm」変数を正常に投稿していますが、クエリを機能させることができません。何が欠けている?ありがとう!
public function searchAction()
{
$request = $this->getRequest();
$searchterm = $request->get('searchterm');
$em = $this->getDoctrine()->getEntityManager();
$query = $em->createQuery("SELECT n FROM AcmeNodeBundle:Node n WHERE n.title LIKE '% :searchterm %'")
->setParameter('searchterm', $searchterm);
$entities = $query->getResult();
return array('entities' => $entities);
}
私のSymfony2プロジェクトの実例:
$qb = $this->createQueryBuilder('u');
$qb->where(
$qb->expr()->like('u.username', ':user')
)
->setParameter('user','%Andre%')
->getQuery()
->getResult();
デバッグを容易にするために、作成したクエリをダンプする必要があります。
クエリビルダーも試してみることをお勧めします。
$qb = $em->createQueryBuilder();
$result = $qb->select('n')->from('Acme\NodeBundle\Entity\Node', 'n')
->where( $qb->expr()->like('n.title', $qb->expr()->literal('%' . $searchterm . '%')) )
->getQuery()
->getResult();
このオプションも役立つと思います。
$qb = $this->createQueryBuilder('u');
$qb->where('u.username like :user')
->setParameter('user','%hereIsYourName%')
->getQuery()
->getResult();
WHERE n.title LIKE '%:searchterm%'
する必要があります
WHERE n.title LIKE:searchterm
public function searchAction() {
$request = $this->getRequest();
$searchterm = $request->get('searchterm');
$em = $this->getDoctrine()->getEntityManager();
$query = $em->createQuery("SELECT n FROM AcmeNodeBundle:Node n WHERE n.title LIKE :searchterm")->setParameter('searchterm', $searchterm);
$entities = $query->getResult();
return array('entities' => $entities);
}
多分 AcmeNodeBundle\Node
? DQLでAcmeNodeBundle:Node
:Node
-名前付きパラメーター