2011-09-11 10 views
8

Questo dovrebbe essere semplice ma non riesco a trovare un esempio funzionante. Ecco un metodo di controllo che genera l'errore "Numero di parametro non valido: il numero di variabili associate non corrisponde al numero di token". Sto postando con successo la variabile "searchterm" ma non riesco a far funzionare la query. Che cosa manca? Grazie!Come eseguire una query del database LIKE in 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); 

} 

risposta

22

esempio Lavorare da mio progetto Symfony2:

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

forse AcmeNodeBundle\Node? In DQL AcmeNodeBundle:Node:Node - parametro

9

Si dovrebbe scaricare la query creata per facilitare il debug di nome.

posso solo suggerire di provare anche il 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

DOVE n.title LIKE '%: searchterm% '

deve essere

DOVE n.title piace: 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

Penso che questa opzione consente anche:

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

Thx, è l'opzione più elegante di lavoro ho trovato. – Gingi