Фильтр поиска в cakephp с динамическими параметрами

Я хочу применить фильтры поиска в своем проекте. У меня есть таблицы опций, где параметры сохраняются с значениями параметра с родительским идентификатором id опции. Например, бренд сохраняет как опцию с родительским идентификатором, установленным в 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)));
1 ответ

Я бы попробовал код ниже. Я предполагаю, что $ условия составляют другие условия, которые вы упомянули в своем вопросе.

$conditions = ... // other conditions you mentioned 

$conditions = array('AND'=>array($conditions, array('Product.id'=>array_unique($product_options))));
$prod_info = $this->paginate('Product',$conditions);

licensed under cc by-sa 3.0 with attribution.