我有一个参数数组,用于绑定查询中的值。
$params = [
'brandFilter' => $articles['brands'],
'categoryFilter' => $articles['categories'],
'priceFromFilter' => $articles['prices']['from'],
'priceToFilter' => $articles['prices']['to'],
];
我的问题是,有时这些参数中的一个或几个可能为空,因为这取决于用户检查的内容。
我可以使用
if !empty
但它很快变得难以书写和阅读,如下所示:
$qb = $this->createQueryBuilder('a');
$qb->select('a');
if (!empty($articles['brands']) && !empty($articles['categories']) && !empty($articles['prices']['from']) && !empty($articles['prices']['to'])) {
$qb->where('a.brand IN (:brandFilter)')
->andWhere('a.category IN (:categoryFilter)')
->andWhere('a.price BETWEEN :priceFromFilter AND :priceToFilter')
->setParameters($params);
}
elseif (!empty($articles['brands']) && !empty($articles['categories'])) {
$this->findByBrandsAndCategories($qb, $articles);
} elseif (!empty($articles['brands']) && empty($articles['categories'])) {
$this->findByBrands($qb, $articles);
} elseif (!empty($articles['categories']) && empty($articles['brands'])) {
$this->findByCategories($qb, $articles);
}
return $qb->getQuery()->getArrayResult();
}
写起来真的很长,我想知道除了通过条件块,是否还有其他解决方案?