У меня проблема в построителе запросов SYMFONY - PullRequest
2 голосов
/ 22 апреля 2019

Я хочу найти пользователя по «имени» и «фамилии»

поэтому сначала у меня есть текст ввода, где я помещаю фамилию и имя в один и тот же вход

и второй я создал этот запрос

public function findListByName($name)
{
    return $this->createQueryBuilder('c')
        ->where('c.firstname LIKE :name')
        ->orWhere('c.lastname LIKE :name)
        ->setParameter('name', '%'.$name.'%')
        ->getQuery()
        ->getResult();
}

обновлено с:

return $this->createQueryBuilder('c')
        ->where('c.firstname LIKE :name1')
        ->orWhere('c.lastname LIKE :name2')
        ->setParameter(':name1', '%'.$name.'%')
        ->setParameter('name2', '%'.$name.'%')
        ->getQuery()
        ->getResult();

Теперь, например: у меня в базе данных есть имя = "тест" и фамилия = "тест2"

и если я введу в поле ввода это слово: "test" или "test2", то его работа вернет пользователя

если я поставлю слово: "test test2 " не работает (без результатов)

так что у кого есть решение для решения этой проблемы пожалуйста

Ответы [ 2 ]

1 голос
/ 22 апреля 2019

Может быть потому, что вы используете два раза параметр, поэтому попробуйте назначить назначить два параметра

например: попробуйте таким образом

public function findListByName($name)
{
      return $this->createQueryBuilder('c')
        ->where('c.firstname LIKE concat('%',:name1', '%') )
        ->orWhere('c.lastname LIKE concat('%',:name2', '%') )
        ->orWhere('concat(c.firstname,' ',c.lastname) LIKE concat('%',:name3', '%') )
        ->setParameters(array('name1'=> $name, 'name2' =>$name, 'name3'=>$name)
        ->getQuery()
        ->getResult();
}
0 голосов
/ 22 апреля 2019

вы можете проверить, если $ name имеет пробел

$qb = $this->createQueryBuilder('c')
$isMultiple = false;
        if (strpos($name, ' ')) {
            $isMultiple = true;
            $name = explode(' ', $name);
        }
        if ($isMultiple) {
            $qb->andWhere('c.firstname LIKE :firstname')
                ->andWhere('c.lastname LIKE :lastname')
                ->setParameters('firstname', '%'.$name[0].'%')
                ->setParameters('lastname', '%'.$name[1].'%');
        } else {
            $qb->andWhere('c.firstname LIKE :name')
                ->orWhere('c.lastname LIKE :name')
                ->setParameters('name', '%'.$name.'%');
        }
...