使用可选参数搜索Symfony2 / Doctrin2

时间:2015-07-21 14:27:10

标签: symfony doctrine-orm

我有一个包含2个字段的表单:名称,年龄,每个都是可选的。 如何使用可选参数在数据库中搜索?

$this->getDoctrine->getRepository('DbBundle:Users')->findBy(array('name' => $name, 'age' => $age)); 

如果姓名或年龄为空,则不返回任何内容。

1 个答案:

答案 0 :(得分:2)

您可以创建DQL查询。您可以在此处查看DQL的文档:http://doctrine-orm.readthedocs.org/en/latest/reference/dql-doctrine-query-language.html

例如,您可以这样做:

$qb = $this->getDoctrine->createQueryBuilder();
$qb->select('u');
$qb->from('DbBundle:Users', 'u');

if ($name){
   $qb->andWhere('name = :name')->setParameter('name', $name);
}

if ($age){
   $qb->andWhere('age = :age')->setParameter('age', $age);
}

$users = $qb->getQuery()->getResult();

您还可以保留存储库方式,只需要使用可用的vars填充数组:

$findByData = [];
if ($name){
   $findByData['name'] = $name;
}

if ($age){
   $findByData['age'] = $age;
}

// Avoid error if $age and $name are empty
if (count($findByData) == 0){
   throw new \Exception('Error ...');
}

$users = $this->getDoctrine->getRepository('DbBundle:Users')->findBy($findByData);