2012-10-09 65 views
0

我有一個網站在cakephp 2.0中開發。 我有一個與hasMany和HABTM產品相關的「產品」表。一個產品可以包含許多產品,該產品可以包含許多產品。我可以有多個級別的產品。 爲了使這個關係我已經使用這個模型(解釋這個問題:cakephp HABTM same model):cakephp使相同的查詢遞歸

class Product extends AppModel { 
    public $name = 'Product'; 
    public $useTable = 'products'; 
    public $belongsTo = 'User'; 
    public $actsAs = array('Containable'); 

     public $hasAndBelongsToMany = array(
     'Ingredient' => array(
      'className' => 'Product', 
      'joinTable' => 'ingredients_products', 
      'foreignKey' => 'product_id', 
      'associationForeignKey' => 'ingredient_id', 
      'unique' => true 
     ) 
    ); 

} 

我知道了如何獲取產品的一個例子:我有一個包含其他產品的產品我就與條件,我一找檢索與他們的財產的所有數據是這樣的:

$this->set('product',$this->Product->find('all', array(
        'contain' => array(
          'Property', 
          'IngredientProduct' 
         ), 
        'conditions' => array('id' => $id) 
       ))); 

(?僅僅是一個例子查詢我不知道如果許多事情的好賴只是一個例子)

但如果我發現3/4產品在我的產品和如果fin dedproduct包含其他產品我該怎麼做?因爲我不知道我有多少「等級」,所以我可以有1個等級或6個等級的產品。一個產品包含許多產品,這finded產品包含其他產品ecc .. 我該怎麼做,並檢索每個產品的屬性?這是一個遞歸查詢,但問題是我不知道我有多少級別。一些想法?謝謝

回答

1

可封閉不穿越如此之深。我會建議解除綁定你的關聯和手動連接表。看看here來看一個例子,並在this食譜章節(你需要知道SQL在你的情況)。或者你可以使用Dave建議的TreeBehavior

+0

但是我必須讓巢連接正確嗎?一個連接內的連接在一個連接內部,直到一個產品裏面沒有產品的權利?但我的問題不是如何進行查詢,而是如何進行遞歸查詢來檢索所有產品,直到產品內部沒有產品爲止 –

+0

正如我寫的,您需要知道SQL來執行如此複雜的查詢。看看這個關於遞歸查詢的問題http://stackoverflow.com/questions/10646833/using-mysql-query-to-traverse-rows-to-make-a-recursive-tree所以,我想,那不是一個選項,所以使用TreeBehavior。也許它會生成多個查詢,但它很容易使用。 – bancer

+0

我知道SQL,我不想用簡單的方法,但最好的和執行方式,因爲我有很多記錄來檢索。我嘗試使用TreeBehavior和連接。我不知道TreeBehavior是否是我的方式 –

0

也許你可以/應該去用類似的東西 - 所有的產品都只是在「產品」表中,那麼你有一個樹形表來保持整個產品的層次結構?

+0

我完全不明白..你能舉一個例子來清除我的問題嗎? –