2016-07-12 246 views
1

我對CakePHP 2.x文檔感到困惑Model Association所以需要一點幫助,在這裏連接並查找包含結果。 enter image description hereCakePHP多模型關聯

Deal Table > id | title 
DealAttribute Table (has options) > id | title 
DealAttributeOption Table (belongs to DealAttribute) > id | title | deal_attribute_id 
DealsDealAttributes Table > id | deal_id | deal_attribute_id | option_id 

需要像導致

Deal [ 
    id, title 
    DealsDealAttributes [ 
     id, deal_id, deal_attribute_id, option_id 
     DealAttribute [ 
      title 
     ] 
     DealAttributeOption [ 
      title 
     ] 
    ] 
] 

我在所有三個Deal, DealAttribute, DealAttributeOptionDealsDealAttributes試圖與$belongsTo,並與$hasAndBelongsToMany但沒有得到包含。 現在我想如果我找到任何交易,那麼所有相關的模型將進入包含。我如何設置模型關聯?

+0

有你定義兩個$的hasMany和$屬於關聯關係各自的型號?或者你是否因此而困惑?如果你遵循cakephp約定製作表格,那麼你可以添加與蛋糕烘烤的模型關係。 –

+0

這將有助於查看你現有的關聯代碼,以查看你迄今嘗試過的內容。基本上,包含外鍵的表的模型具有「belongsTo」關係,而與另一個包含外鍵的表關聯的模型將是「hasOne」或「hasMany」關係。 – drmonkeyninja

+0

@drmonkeyninja我嘗試了很多方法,但沒有人工作,因此我很困惑,你能告訴我正確的方向嗎? – Anupal

回答

0

它看起來像你的模型協會應設立這樣的: -

class Deal extends AppModel { 

    public $belongsTo = [ 
     'User' 
    ]; 

    public $hasMany = [ 
     'DealsDealAttribute' 
    ]; 

} 

class DealsDealAttribute extends AppModel { 

    public $belongsTo = [ 
     'Deal', 
     'DealAttribute', 
     'DealAttributeOption' => [ 
      // Foreign key breaks naming convention so needs setting manually 
      'foreignKey' => 'option_id' 
     ] 
    ]; 

} 

class DealAttribute extends AppModel { 

    public $belongsTo = [ 
     'User' 
    ]; 

    public $hasMany = [ 
     'DealsDealAttribute' 
    ]; 

} 

class DealAttributeOption extends AppModel { 

    public $hasMany = [ 
     'DealsDealAttribute' 
    ]; 

} 

您將需要設置在DealsDealAttribute模式DealAttributeOption關聯的外鍵,你已經從CakePHP的命名破大會(理想情況下應該是deal_attribute_option_id)。

更新

然後檢索與相關記錄的交易,你可以使用contain檢索相關模型是這樣的: -

$result = $this->Deal->find('first', [ 
    'contain' => [ 
     'DealsDealAttribute' => [ 
      'DealAttribute', 
      'DealAttributeOption' 
     ] 
    ], 
    'conditions' => [ 
     'Deal.id' => $id 
    ] 
]); 
+0

我做了同樣的事情,但是當我發現交易時,只有'DealsDealAttribute'沒有與其關聯。 – Anupal

+0

你在做什麼來檢索數據。這聽起來像你發現的查詢是錯誤的! – drmonkeyninja

+0

'$ result = $ this-> Deal-> findById($ id);'這就是我在控制器中找到交易的方式。 – Anupal