Поисковый фильтр в cakephp с динамическими настройками

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

0

Решение

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

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

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]