【发布时间】:2021-08-11 09:56:06
【问题描述】:
我有 2 个 DQL 查询
我希望用户(使用选择表单)能够选择:
- 一次过滤 1 个。无论是派对还是城市
或
- 同时使用多个过滤器:派对 + 城市...然后是其他过滤器。
总结: 在我的数据库中有派对和城市。用 select 的形式。用户必须能够选择他想要的过滤器。如果他选择了一个特定的派对而没有指定城市,这将显示所有城市中的所有派对。他也可以选择一个城市,在这种情况下,他将拥有所选城市的所有党派。或者第三种情况,他选择了一个派对 + 一个城市。
当一个工作时,另一个不工作。 我认为我的条件和运营商有问题。 我读到使用 orWhere () 是不好的做法。
提前谢谢你。
public function searchByParty($party, $city)
{
$query = $this->createQueryBuilder('s');
$query = $query
->select( 'party', 'city', 's')
->join ('s.party', 'party ')
->join ('s.city', 'city');
if (!empty($party) === !empty($city)) {
$query = $query
->andWhere('party .id = :sport')
->andWhere('city.id = :city')
->setParameter('party ', $party )
->setParameter('city', $city);
}
if (!empty($party) && !empty($city)) {
$query = $query
->orWhere('party.id = :party')
->orWhere('city.id = :city')
->setParameter('party', $party )
->setParameter('city', $city);
}
return $query->getQuery()->getResult();
【问题讨论】: