2016-09-09 2 views
1

Hiho,доктрина не свяжет параметр с запросом

У меня есть следующая проблема. Я хочу создать запрос с querybuilder с помощью orX, andX и Like. Собственный запрос правильно сформирован, но параметры не будут связаны.

Кодекс для создания запроса:

$qb = $this->getEntityManager()->createQueryBuilder(); 
$qb->select('u') 
    ->from('Application\Entity\User', 'u') 
    ->andWhere(
     $qb->expr()->orx(
      $qb->expr()->andX(
       $qb->expr()->like('u.name', ':name'), 
       $qb->expr()->like('u.lastname', ':lastname') 
      ), 
      $qb->expr()->like('u.email', ':email') 
     ) 
    ) 
    ->setParameter('name', '%' . $findBy['name'] . '%') 
    ->setParameter('lastname', '%' . $findBy['lastname'] . '%') 
    ->setParameter('email', '%' . $findBy['email'] . '%'); 

Дамп getParameters() выглядит следующим образом:

object(Doctrine\Common\Collections\ArrayCollection)[579] 
private 'elements' => 
    array (size=3) 
     0 => 
     object(Doctrine\ORM\Query\Parameter)[575] 
      private 'name' => string 'name' (length=4) 
      private 'value' => string '%Michael%' (length=9) 
      private 'type' => int 2 
     1 => 
     object(Doctrine\ORM\Query\Parameter)[576] 
      private 'name' => string 'lastname' (length=8) 
      private 'value' => string '%Müller%' (length=8) 
      private 'type' => int 2 
     2 => 
     object(Doctrine\ORM\Query\Parameter)[577] 
      private 'name' => string 'email' (length=5) 
      private 'value' => string '%[email protected]%' (length=20) 
      private 'type' => int 2` 

ли какой-либо орган имеет понятия, почему параметр не связанный в запросе ?

+0

Какого параметра вы говорите? – martin

+0

Параметры, заданные с помощью '-> setParameter ('...', '...')' –

+0

Что с ними? – martin

ответ

0

->expr()->like( второй аргумент, который будет использоваться в сравнении LIKE(). Вы можете попробовать что-то похожее на:

$this->expr()->like('u.name', $this->expr()->literal('%'.$findBy['name'].'%')) 

Надеется, что это помощь

+0

Итак, запрос верен, но результат пуст. Если я запускаю запрос непосредственно в базе данных, я получил результат. –

+0

Привет @MatusvonMatushausen пытается отладить DQL, сбрасывая результат '$ qb-> getQuery() -> getSQL()' Дайте мне знать значение – Matteo

+0

дамп getSQL: 'SELECT u0_.email AS email_0, u0_.password AS password_1 , u0_.lastonline AS lastonline_2, u0_.name AS name_3, u0_.lastname AS lastname_4, u0_.ip AS ip_5, u0_.token AS token_6, u0_.facebookId AS facebookId_7, u0_.userid AS userid_8, u0_.role AS role_9 FROM user u0_ WHERE (u0_.name LIKE '% User%' AND u0_.lastname LIKE '% Name%') ИЛИ u0_.email LIKE '%[email protected]%' (длина = 371) ' –