CakePHP:hasMany with join table

时间:2012-04-26 01:00:14

标签: cakephp relationship cakephp-appmodel

我有两个模型:StoreReview。我网站的用户可以在商店中留下评论。在我的数据库中,我有一个联接表,reviews_stores将评论与商店相关联。

如何链接我的模特?我假设Store应该有多个ReviewReview应该属于Store,但是连接表导致CakePHP出现问题,因为CakePHP假设我{{1} table有一个名为reviews的列。

我使用联接表的原因是我的网站的许多部分都可以被审核。例如,品牌。将创建一个新的store_id记录,并将记录插入Review表以关联这两个记录。

非常感谢任何帮助。

3 个答案:

答案 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')
     );
}

然后,您可以使用任意数量的额外模型执行此操作,而无需触摸数据库。