2012-03-28 9 views
1

私は洋服のオンラインショップを作っています。おそらくタグ付けシステムを作る必要があります。CakePHPの検索可能なタグ

アプリケーション全体がCakePHP上に構築されており、eBayに似た、すべての製品を管理するためのアイデアが必要です。 $ 10の間に価格:それはpricetypeproducersizestatus

だと、たとえば、それらのいくつかは、との項目を検索できるようにするには、マルチ検索可能であるべきで、各製品にタグ付けする例えば

$ 20、サイズSまたはM

+0

どれも実際に、私にはタグのように、すでに上のフィールドとしてそんなに音しません(または追加される)テーブルであり、ページネーションシステムを使用して簡単にソート可能です。 – jeremyharris

答えて

0

基本的にキー/値ストレージとして機能し、これらの属性を各製品に割り当てる属性テーブルがあります。

アトリビュート自体には、アトリビュートに使用可能なさまざまなサイズを読むことができるattribute_optionsテーブルがあります。

これで、属性テーブルと製品テーブルを検索するだけで済みます。

0

あなたの説明から、追加のテーブルは必要ありません。商品表のフィールドとして追加し、それに基づいてクエリを実行するだけです。それはもっと速く、より論理的にレイアウトされます...等。

あなたの例は以下のように検索可能です。 (それは少し行き過ぎようだが、将来は本当に簡単見つけ、脂肪のコントローラを以下の、スキニーモデルマントラようになります。これらのフィールドの

//ProductsController 
public function whatever() { 
    $opts = array(
     'price_high' => 10, 
     'price_low' => 20, 
     'sizes' => array('S', 'M') 
    ); 
    $this->Product->getProducts($opts); 
} 


//Product Model 
public function getProduts($opts = null) { 

    //initialize variables 
    $params = array('conditions'=>array()); 

    //size(s) 
    if(!empty($opts['sizes']) { 
     array_push($params['conditions'], array('Product.size'=>$opts['sizes'])); 
    } 

    //price(s) 
    if(!empty($opts['price_high']) { 
     array_push($params['conditions'], array('Product.price <='=>$opts['price_high'])); 
    } 
    if(!empty($opts['price_low']) { 
     array_push($params['conditions'], array('Product.price >='=>$opts['price_low'])); 
    } 

    return $this->find('all', $params); 
} 
関連する問題