我想在我的项目中应用搜索过滤器。我有选项表格,其中的选项正在使用选项id的父ID与选项值一起保存。例如,品牌正在将父级ID设置为0并且所有品牌都将品牌ID作为其父级ID集的选项进行保存,并在保存产品时将产品选项保存在product_options表中。现在我想在产品列表页面中应用过滤器。我使用下面的代码过滤:在动态选项cakephp中搜索过滤器
$conditions = array();
$product_options = $this->ProductOption->find('list',array('fields'=>array('product_id'),'conditions'=>array('ProductOption.option_value_id'=>$data['data']['options'])));
$conditions = array_merge($conditions,array('Product.id'=>array_unique($product_options)));
$prod_info = $this->paginate('Product',$conditions);
$this->set(compact('prod_info'));
当我搜索的任何产品与他们的品牌名称,它工作正常,但如果我尝试用价格(也是一个选项),以进行搜索,那么它给了其他品牌的产品也具有价格等于过滤价格选项。请检查以下链接以正确理解问题。
http://primemart.in/Food-Processors-Ii4zRGAKYAo=
请谁能帮助我走出我的问题。 谢谢。
请对我的代码,我用来传递在条件一看,得到的结果
$product_options = $this->ProductOption->find('list',array(
'fields'=>array('product_id'),
'conditions'=>array('ProductOption.option_value_id'=>$data['data']['options'])
));
//$this->Option->unBindModel(array('belongsTo'=>'Product'));
$product_options = $this->Option->find('all', array(
'conditions'=>array('Option.id'=>$data['data']['options'])
));
//pr($product_options);
$opt_arr = array();
foreach ($product_options as $op) {
$opt_arr[$op['Option']['parent_id']][] = $op['Option']['id'];
}
$conditions_arr = array();
foreach($opt_arr as $opt) {
$key_arr = array();
foreach($opt as $op) {
$key_arr['OR']['ProductOption.option_value_id'][] = $op;
}
$conditions_arr['AND'][] = $key_arr;
}
$pr_options = $this->ProductOption->find('list', array(
'conditions'=>$conditions_arr,
'fields'=>array('product_id')
));
$conditions = array_merge($conditions, array('Product.id'=>array_unique($pr_options)));
我想查询形成了OR条件,而你需要AND在你的查询。您可以将条件与AND结合起来以获得所需的结果。 – cartina 2014-09-23 11:42:44
@cartina我也试过使用AND条件。但是这仍然不起作用。 – 2014-09-23 12:18:31
告诉我们您是怎么尝试使用AND – scx 2014-09-23 12:23:39