我在查询生成器 SYMFONY 中遇到问题

I have probleme in query builder SYMFONY

我想通过 "firstname" 和 "lastname"

搜索用户

所以一开始我有一个输入文本,我将姓氏和名字放在同一个输入中

然后我创建了这个查询

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

现在举例: 我在数据库中有名字 = "test" 和姓氏="test2"

如果我输入这个词:"test" 或 "test2" 它的工作和 return 用户

如果我输入这个词:"test test2" 是行不通的(没有结果)

请问谁有办法解决这个问题

可能是因为你使用了两次参数所以尝试分配分配两个参数

例如:试试这个方法

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

你可以检查 $name 是否有 space

$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.'%');
        }