2011-09-11 10 views
8

Esto debería ser simple, pero no puedo encontrar un ejemplo de trabajo. He aquí un método de controlador que lanza el error "número de parámetro no válido: número de variables ligadas no coincide con el número de fichas". Estoy publicando la variable "searchterm" con éxito pero no puedo hacer que la consulta funcione. ¿Lo que falta? ¡Gracias!Cómo hacer una consulta de base de datos LIKE en 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); 

} 

Respuesta

22

Ejemplo de trabajo de mi proyecto Symfony2:

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

tal vez AcmeNodeBundle\Node? En DQL AcmeNodeBundle:Node:Node - parámetro denominado

9

Debe volcar la consulta creada para una depuración más sencilla.

sólo puedo sugerir que también intenta la 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

DONDE COMO n.title '%:% término de búsqueda '

debería ser

DONDE n.title como: término de búsqueda

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

Creo que esta opción también ayuda:

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

Thx, es la opción de trabajo más elegante que he encontrado. – Gingi

Cuestiones relacionadas