cakephp pagination with AND OR condition inside loop -
i working cakephp pagination using 2 group of check box filter materialtype , occasion wrote following code
public function index($category) { if(!empty($this->params['url']['data']['filter']['materialtype'])) { foreach ($this->params['url']['data']['filter']['materialtype'] $v){ $conditions1[] ="(product.materialtype '%$v%')"; } $conditions[] = implode(' or ', $conditions1); } if(!empty($this->params['url']['data']['filter']['occasion'])) { foreach ($this->params['url']['data']['filter']['occasion'] $v){ $conditions2[] ="`product`.`occasion` '%$v%'"; } $conditions[] = implode(' or ', $conditions2); } } my following code generating sql query
select `product`.`id`, `product`.`category`, `product`.`name`, mydb`.`products` `product` `product`.`category` = 'necklace' , (`product`.`materialtype` '%yellow gold%') or (`product`.`materialtype` '%white gold%') , (`product`.`occasion` '%traditional%') or (`product`.`occasion` '%modern%') but looking output.
select `product`.`id`, `product`.`category`, `product`.`name`, mydb`.`products` `product` `product`.`category` = 'necklace' , ((`product`.`materialtype` '%yellow gold%') or (`product`.`materialtype` '%white gold%')) , ((`product`.`occasion` '%traditional%') or (`product`.`occasion` '%modern%'))
you need remove inner bracket inner statement inside foreach. , add @ outside below.
if(!empty($this->params['url']['data']['filter']['materialtype'])) { foreach ($this->params['url']['data']['filter']['materialtype'] $v){ $conditions1[] = "product.materialtype '%$v%'"; } $str_cond = implode(' or ', $conditions1); $conditions[] = '(' . $str_cond . ')'; } if(!empty($this->params['url']['data']['filter']['occasion'])) { foreach ($this->params['url']['data']['filter']['occasion'] $v){ $conditions2[] = "product.occasion '%$v%'"; } $str_cond = implode(' or ', $conditions2); $conditions[] = '(' . $str_cond . ')'; }
Comments
Post a Comment