0

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

如何链接我的模型?我假设 aStore应该 haveMany Review,并且 aReview应该属于 a Store,但是连接表导致 CakePHP 出现问题,因为 CakePHP 假设我的reviews表有一个名为store_id.

我使用连接表的原因是我的网站的许多部分都可以查看。例如,品牌。将创建一条新Review记录,并将一条记录插入到brands_reviews表中以关联两条记录。

任何帮助将非常感激。

4

3 回答 3

1

为什么不简单地使用一个 Review 模型和一个带有字段“foreign_key”和另一个字段“model”的评论表?这样您就不需要复制表和继承或复制模型。这也将消除对连接表的需要。

如果您想继续使用您的数据库设计,那么您必须使用 HABTM 关联而不是 hasMany 关联。但即使在您想保持可连接的情况下,您也可以再次使用 foreign_key/model 并简单地拥有一个连接表和一个评论表。

顺便说一句,您的连接表 review_store 没有遵循约定,它应该是 reviews_stores。但它与您用于brands_reviews 的架构不同。;)

于 2012-04-26T01:23:00.533 回答
0

您可以查看的每个模型都不需要所有连接表,只需将模型名称本身存储在Review表中的字段中即可。

像这样设置你的关系:

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

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

于 2012-04-26T08:25:24.713 回答
0

在我看来,这不是多对多关系,而是分组的一对多关系。我会丢失连接表,而只是有一个额外的表来概述评论所属的“组”。所以评论表会有review_id、link_id(相关品牌或商店的外键)、review_type_id(描述评论是针对品牌还是商店的外键等)。那么review_type表只需要有review_type_id,review_type(varchar)。

于 2012-04-26T06:40:29.590 回答