如果空白字段,则使用 Doctrine 进行搜索

search with Doctrine if blank field

我已经为我的多重搜索编写了一个 DQL 查询,如果我指定所有字段,工作正常,但如果我将其中一个字段留空,它不会显示结果

          $query = $em->createQuery
          ('SELECT d FROM EntityBundle:Doctor d WHERE d.name =:name AND d.degree =:degree AND d.area = :area_id AND d.sex = :sex AND
           (

                 ( YEAR(d.dob)  BETWEEN :d2 AND :d1 ) OR
                 ( YEAR(d.dob)  BETWEEN :e2 AND :e1 ) OR
                 ( YEAR(d.dob)  BETWEEN :f2 AND :f1 )

            )'          )

           ->setParameter('name', $name)
           ->setParameter('degree', $degree)
            ->setParameter('area_id', $area)
            ->setParameter('sex', $sex)
            ->setParameter('d1', $this->p1)
            ->setParameter('d2', $this->p2)
            ->setParameter('e1', $this->q1)
            ->setParameter('e2', $this->q2)
            ->setParameter('f1', $this->r1)
            ->setParameter('f2', $this->r2)

          ->getResult();

我也尝试过 setParameter('name', (is_null($name)? "IS NULL" : $name)) 但仍然没有运气..

您可以使用 QueryBuilder 而不是 DQL

$qb = $qb->select('d');
if($name !== null) {
     $qb = $qb->where('d.name = :name')->setParameter(...);
}
...
$qb->getQuery()->getResult();