2012-04-26 82 views
0

我有兩個模型:StoreReview。我的網站的用戶可以在商店中留下評論。在我的數據庫中,我有一個連接表,reviews_stores將審閱與商店相關聯。CakePHP:hasMany連接表

如何鏈接我的模型?我假設Store應該有許多Review,而Review應該屬於Store,但連接表導致CakePHP出現問題,因爲CakePHP假定我的reviews表具有名爲store_id的列。

我使用連接表的原因是因爲我的網站的很多部分都可以查看。例如,品牌。將創建一個新的Review記錄,並且將在brands_reviews表中插入一條記錄以關聯這兩條記錄。

任何幫助將不勝感激。

回答

0

在我看來,這不是一個多關係,而是一個多組關係。我失去了連接表,只是簡單地有一張額外的表格來概述評論屬於哪個「組」。因此,審覈表將具有review_id,link_id(相關品牌或商店的外鍵),review_type_id(描述該評論是針對品牌還是商店等的外鍵)。然後review_type表只需要有review_type_id,review_type(varchar)。

+0

那麼在'review_type'表中,'review_type'就像'Store'或'Brand'一樣? – 2012-04-26 08:47:30

+0

這就是我會怎麼做的呀。那麼如果你在將來添加更多'review_type',他們只會得到一個新想法。有效地,其評論的基本分類系統類似於新的分類系統將如何工作,只有每個評論只能有1個評論類型 – mattwadey 2012-04-26 09:37:36

+0

謝謝@mattwadey。接受你的答案,因爲你是有幫助的,但更重要的是,不是一個事情的屁股。 – 2012-04-26 10:23:05

1

你爲什麼不簡單地使用一個Review模型和帶有「foreign_key」字段和另一個字段「model」的評論表?由此你不需要複製表格並繼承或複製模型。這也將消除對連接表的需求。

如果你想繼續使用你的數據庫設計,那麼你必須通過hasMany關聯使用HABTM關聯。但即使在你想保留這個連接表的情況下,你也可以使用foreign_key/model,並且只需要一個連接表和一個評論表。

順便說一句,您的連接表review_store不遵循約定,它應該是reviews_stores。但是,它與用於brands_reviews的模式不同。 ;)

+0

因爲評論也可以與其他模型相關聯,例如上面的示例中的品牌。連接表將審查與商店相關聯,但它可以是品牌或銷售或博客文章等。 – 2012-04-26 01:45:50

+2

好吧,正如我所說的,如果您使用兩個字段(foreign_key,model)並將它們組合,則這不是必需的。如果你使用uuids,你甚至不需要模型領域。連接表是*不*必需的。 – burzum 2012-04-26 08:30:52

0

您不需要爲每種型號的所有連接表進行檢查,只需將型號名稱本身存儲在Review表中的字段中即可。

設置你喜歡這樣的關係:

class Store extends AppModel { 
    public $hasMany = array(
     'Review' => array('conditions' => array('Review.model' => 'Store') 
    ); 
} 

,只要你喜歡,而無需觸摸數據庫然後你可以做到這一點與許多額外的模型。

+0

謝謝,@Dunhamzzz。但是,模型名稱中發生的變化是什麼?即從'Store'到'Shop'作爲一個簡單的例子? – 2012-04-26 08:46:32

+0

'UPDATE Reviews SET Model ='Shop'WHERE Model ='Store'' – Dunhamzzz 2012-04-26 09:26:35