我在查询生成器 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.'%');
}
我想通过 "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.'%');
}