2011-09-11 12 views
8

To powinno być proste, ale nie mogę znaleźć działającego przykładu. Oto metoda kontrolera, która zgłasza błąd "Nieprawidłowy numer parametru: liczba powiązanych zmiennych nie pasuje do liczby tokenów". Publikuję zmienną "searchterm", ale nie mogę uruchomić zapytania. Czego brakuje? Dzięki!Jak wykonać zapytanie bazy danych LIKE w Symfony2

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

} 

Odpowiedz

22

przykład Praca z moim projekcie Symfony2:

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

może AcmeNodeBundle\Node? W DQL AcmeNodeBundle:Node:Node - o nazwie parametr

9

Powinieneś zrzucić utworzone zapytanie w celu łatwiejszego debugowania.

mogę tylko sugerować również spróbować QueryBuilder:

$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

GDZIE n.title LIKE „%: searchterm% "

powinien być

GDZIE n.title odczuwalna: 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

myślę, opcja ta pomaga również:

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

Thx, to najbardziej eleganckim rozwiązaniem pracę znalazłem. – Gingi

Powiązane problemy