我有两个模型:Store
和Review
。我网站的用户可以在商店中留下评论。在我的数据库中,我有一个联接表,reviews_stores
将评论与商店相关联。
如何链接我的模特?我假设Store
应该有多个Review
,Review
应该属于Store
,但是连接表导致CakePHP出现问题,因为CakePHP假设我{{1} table有一个名为reviews
的列。
我使用联接表的原因是我的网站的许多部分都可以被审核。例如,品牌。将创建一个新的store_id
记录,并将记录插入Review
表以关联这两个记录。
非常感谢任何帮助。
答案 0 :(得分:1)
为什么你不是简单地使用一个评论模型和一个带有“foreign_key”字段和另一个字段“模型”的评论表?这样您就不需要复制表并继承或复制模型。这也将不再需要连接表。
如果您想继续使用数据库设计,那么您必须在hasMany关联上使用HABTM关联。但即使在你希望保留jointable的情况下,你也可以使用foreign_key / model,只需要一个连接表和一个review表。
顺便说一句,你的联接表review_store不遵循约定,它应该是reviews_stores。但它与您用于brands_reviews的架构不同。 ;)
答案 1 :(得分:0)
在我看来,这不是一个很多的关系,而是一个多组合的关系。我失去了联接表,只是有一个额外的表格,概述了评论所属的“组”。因此,评论表将具有review_id,link_id(相关品牌或商店的外键),review_type_id(描述评论是针对品牌或商店的外键等)。然后,review_type表只需要有review_type_id,review_type(varchar)。
答案 2 :(得分:0)
您无需查看每个模型的所有连接表,只需将模型名称本身存储在Review
表的字段中即可。
建立你的关系:
class Store extends AppModel {
public $hasMany = array(
'Review' => array('conditions' => array('Review.model' => 'Store')
);
}
然后,您可以使用任意数量的额外模型执行此操作,而无需触摸数据库。