0

私はCakePHPとオブジェクト指向プログラミングに比較的慣れていません。私は以前にCakePHPでアプリを作成したことがありますが、この程度までは作成したことがないため、助けを求めています。

私は大規模な製品管理データベースを持っています。ユーザーは、最も近い製品を見つけるためにフィルター基準を設定できる必要があります。

productsテーブルには、それぞれのテーブルに関連するcategory_id、manufacturer_id、type_id、status_idが含まれています。

フィルタごとにドロップダウンボックスのあるサイドバーがあり、すべてのフィルタを連携させたいと考えています。たとえば、メーカーと製品タイプを選択した場合は、それらのフィルタリングされた結果を表示し、ステータスとカテゴリのドロップダウンを変更して、すでにフィルタリングされた結果。

これまでは、ユーザー入力に基づく動的クエリ設定条件を使用し、フィルターが適用されるたびにwhere句を追加することでこれを実現していました。

これまでのところ、私はを使用して個別にフィルタリングされた結果を取得することしかできませんでした

$this->Product->recursive = 0;
    $mid = (isset($this->params['named']['mid'])) ? $this->params['named']['mid'] : '';
    if(!empty($mid)){
        $this->paginate = array(
            'conditions' => array('Product.manufacturer_id' => $mid),
            'limit' => 10
        );
    }
    $products = $this->paginate('Product');
    $this->set(compact('products'));

ここで、「mid」は製造元IDであり、これはURLに「mid」を手動で入力しています。

ユーザーがcategory_id、manufacturer_id、type_id、status_id、または任意の組み合わせを設定した場合、結果を累積的にフィルタリングするにはどうすればよいですか?また、ドロップダウンを再設定するためにどのクエリを使用しますか?

(最終的にはajaxを使用しますが、今のところ、送信ボタン付きのドロップダウンボックスが4つあると仮定します)

4

1 に答える 1

1

長い道のりは次のとおりです。

var $conditions = array();

if (isset($this->params['named']['mid']) && !empty($this->params['named']['mid'])){
   $conditions['Product.manufacturer_id'] = $this->params['named']['mid']);
}
if (isset($this->params['named']['catid']) && !empty($this->params['named']['catid'])){
   $conditions['Product.category_id'] = $this->params['named']['catid']);
}
if (isset($this->params['named']['statid']) && !empty($this->params['named']['statid'])){
   $conditions['Product.status_id'] = $this->params['named']['statid']);
}

$this->paginate['conditions'] = $conditions;
$this->paginate['limit'] = '10';
$this->set('products', $this->paginate('Product'));

コツをつかめば、すべてのチェックをループに入れることができます。

于 2013-02-10T13:21:50.577 に答える