Я хочу применить поисковые фильтры в моем проекте. У меня есть таблицы параметров, где параметры сохраняются со значениями параметров с родительским идентификатором идентификатора параметра. Например, бренд сохраняет как опцию с родительским идентификатором, установленным в 0, и все бренды имеют идентификатор бренда в качестве своего родительского идентификатора, и при сохранении продукта я сохраняю параметры продукта в таблице product_options. Теперь я хочу применить фильтры на странице списка товаров. Я использую следующий код для фильтрации:
$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)));
Я хотел бы попробовать код ниже. Я предполагаю, что $ условия соответствуют другим условиям, которые вы упоминаете в своем вопросе.
$conditions = ... // other conditions you mentioned
$conditions = array('AND'=>array($conditions, array('Product.id'=>array_unique($product_options))));
$prod_info = $this->paginate('Product',$conditions);
Других решений пока нет …