web-dev-qa-db-ja.com

Symfony2で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);

}
13
Acyra

私のSymfony2プロジェクトの実例:

$qb = $this->createQueryBuilder('u');
$qb->where(
         $qb->expr()->like('u.username', ':user')
     )
     ->setParameter('user','%Andre%')
     ->getQuery()
     ->getResult();
29
virtustilus

デバッグを容易にするために、作成したクエリをダンプする必要があります。

クエリビルダーも試してみることをお勧めします。

$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();

doc

10
Tjorriemorrie

このオプションも役立つと思います。

$qb = $this->createQueryBuilder('u');
$qb->where('u.username like :user')
     ->setParameter('user','%hereIsYourName%')
     ->getQuery()
     ->getResult();
5

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);

}
2
Bogdan Mantescu

多分 AcmeNodeBundle\Node? DQLでAcmeNodeBundle:Node:Node-名前付きパラメーター

0
SMka