2011-09-11 9 views
8

これは簡単なはずですが、実際の例は見つかりません。ここでは、「無効なパラメータ番号:バインドされた変数の数がトークンの数と一致しません」というエラーをスローするコントローラメソッドがあります。私は "searchterm"変数を正常にポストしていますが、クエリを動作させることはできません。何が欠けている?ありがとう!Symfony2でLIKEデータベースクエリを実行する方法

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

} 

答えて

22

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

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

9

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

私はあなたにもquerybuilder試みるだけ提案することができます:私のSymfony2のプロジェクトから例を作業する

$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

1

n.title LIKE「%:検索語%を'

はWHERE LIKE n.title:検索語

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

私は、このオプションも役立ちます考える:

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

Thxを、それは私が見つけた最もエレガントな作業を続けています。 – Gingi

関連する問題