好的,所以我无法弄清楚为什么在将变量传递给setParameter时查询构建器不起作用。
这有效:
public function findByMatch($name)
{
$result = $this->createQueryBuilder('u')
->select('u.firstname, u.lastname')
->where('u.firstname LIKE :fname')
->setParameter('fname', ' % '.'paul'.' %')
;
return $result->getQuery()->getResult();
}
但是当条件通过变量传递时,它没有,它将$ name返回为null
// from an entity
$matches = $em->getRepository('AppBundle:User')->findByMatch($type);
//.........
// repo
public function findByMatch($name)
{
$result = $this->createQueryBuilder('u')
->select('u.firstname, u.lastname')
->where('u.firstname LIKE :fname')
->setParameter('fname', ' % '.$name. ' %')
;
return $result->getQuery()->getResult();
}
进一步向下钻取,这也行不通,所以并不是传递变量。
public function findByMatch($name = "paul")
{
$result = $this->createQueryBuilder('u')
->select('u.firstname, u.lastname')
->where('u.firstname LIKE :fname')
->setParameter('fname', ' % '.$name. ' %')
;
//return $result;
return $result->getQuery()->getResult();
}
答案 0 :(得分:1)
实际上,就像塞拉德所说的那样,我认为围绕%的空间会弄乱你的查询。 我测试了一些组合,似乎只有这个组合起作用了:
->setParameter('fname', '%' . $name . '%')
因此,如果您不需要这些空格,我建议您删除它们。