Как сделать запрос к базе данных LIKE в Symfony2 - PullRequest
11 голосов
/ 11 сентября 2011

Это должно быть просто, но я не могу найти рабочий пример. Вот метод контроллера, который выдает ошибку «Недопустимый номер параметра: количество связанных переменных не соответствует количеству токенов». Я успешно публикую переменную 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);

}

Ответы [ 5 ]

28 голосов
/ 15 июня 2013

Рабочий пример из моего проекта Symfony2:

$qb = $this->createQueryBuilder('u');
$qb->where(
         $qb->expr()->like('u.username', ':user')
     )
     ->setParameter('user','%Andre%')
     ->getQuery()
     ->getResult();
9 голосов
/ 12 сентября 2011

Вам следует вывести созданный запрос для упрощения отладки.

Я могу только предложить вам также попробовать построитель запросов:

$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

5 голосов
/ 09 августа 2017

Я думаю, что эта опция также помогает:

$qb = $this->createQueryBuilder('u');
$qb->where('u.username like :user')
     ->setParameter('user','%hereIsYourName%')
     ->getQuery()
     ->getResult();
2 голосов
/ 30 апреля 2014

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

}
0 голосов
/ 12 сентября 2011

может AcmeNodeBundle\Node? В DQL AcmeNodeBundle:Node :Node - именованный параметр

...