为了在系统中搜索人员,我在存储库中编写了一个函数。此函数接收具有字段名称和条件的数组,并使用查询构建器来制定有效的 DQL 语句。
一切正常,直到我想制定一个搜索规则,例如:
“找到所有属于某个领域的人。”
... Person 和 Domain 实体具有多对多关系。
根据 Symfony2 的说法,这种关系是正确定义的,实际上一切都在 Twig 模板和控制器中工作。
该函数如下所示:-
private function query($extra_conditions = null)
{
$qb = $this->_em->createQueryBuilder();
$query =
$qb->select('p')
->from('AppMainBundle:Person', 'p')
->leftjoin('AppMainBundle:Domain', 'd')
->where("p.firstname IS NOT NULL")
->andWhere("p.lastname IS NOT NULL")
->andWhere("p.function IS NOT NULL");
if ($extra_conditions!=null)
{
foreach ($extra_conditions as $condition)
{
#filter on firstname
if (key($condition)=='firstname')
$query = $query->andWhere('p.firstname LIKE ?1')
->setParameter(1, $condition['firstname']);
#filter on lastname
if (key($condition)=='lastname')
$query = $query->andWhere('p.lastname LIKE ?1')
->setParameter(1, $condition['lastname']);
#filter on gender
if (key($condition)=='gender')
$query = $query->andWhere('p.gender = '.$condition['gender']);
#filter on domain(s)
if (key($condition)=='domains')
$query = $query->andWhere('d.id IN ('.$condition['domains'].')');
#filter on town
if (key($condition)=='town')
$query = $query->andWhere('p.town LIKE ?1')
->setParameter(1, $condition['town']);
}
}
$query = $query->orderBy("p.lastname", "ASC");
$query = $qb->getQuery();
return $query->getResult();
}
没有错误,但是将任何域作为搜索条件给出;找到并返回所有域的人。
域以数组形式提供,如 (2, 4)。
我可以进行哪些更改才能找到属于某些域的人?