我有一个包含2个字段的表单:名称,年龄,每个都是可选的。 如何使用可选参数在数据库中搜索?
$this->getDoctrine->getRepository('DbBundle:Users')->findBy(array('name' => $name, 'age' => $age));
如果姓名或年龄为空,则不返回任何内容。
答案 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);