我的Symfony2应用程序有一个Person
实体,它具有$firstName
和$lastName
作为其属性。它有一个方法getFullName()
它返回全名Person
。在DQL中使用实体的方法(Symfony2)
// Vendor/Bundle/Entity/Person.php
public function getFullName()
{
return $this->firstName . ' ' . $this->lastName;
}
现在,我想让用户搜索Person
。只有一个用户可以输入某个值的搜索字段。该值可以是他们寻找的人的全名,名字或姓氏。
下面是从控制器一些代码,会做过滤:
// Vendor/Bundle/Controller/PersonController.php
public function listAction(Request $request)
{
// ...
$people = $this->get('doctrine')
->getRepository('SomeBundle:Person')
->createQueryBuilder('p')
->where('p.fullName = :fullName')
->setParameter('fullName', $request->query->get('fullName'))
->getQuery()
->getResult();
// ...
}
但是,这是行不通的。显然,这是因为fullName
不是Person
的字段之一。
有没有办法使用QueryBuilder过滤结果,即我不想迭代所有结果并比较它们的名称?
虽然Victor's answer显示正确的结果,我仍然在寻找一个更“优雅”的方式来做到这一点。如果您有任何建议,请将您的建议发布为答案!
那么,它是b因为fullName不是Person的字段。您可以存储它,也可以过滤firstName或/和lastName(在where子句中)。 – Brice
@Brice但是,如果用户输入一个人的全名,它将不起作用。 – pikachu0
为什么不呢?只需'爆炸()'fullName并将每个部分与'firstName'和'lastName'进行比较。 – Brice