0
私はクエリで値をバインドするために使用するパラメータの配列を持っています。ダイナミック値をDoctrineとバインドする方法
$params = [
'brandFilter' => $articles['brands'],
'categoryFilter' => $articles['categories'],
'priceFromFilter' => $articles['prices']['from'],
'priceToFilter' => $articles['prices']['to'],
];
私の問題は、ユーザーがチェックした内容に依存するため、これらのパラメータの1つまたは複数が空になることがあることです。
私は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();
}
それを書くのは本当に長いですし、誰もが条件ブロックを経由するよりも、別の解決策を持っていた場合、私は思っていました?
おかげ@Samuelウィッキーそれをより読みやすく、スケーラブルで、書くのは苦痛が少ないです – thierrybou