gpt4 book ai didi

mysql - 将数据透视表连接到另一个表(HABTM 连接 HABTM 和模型关联)

转载 作者:行者123 更新时间:2023-11-29 09:07:32 26 4
gpt4 key购买 nike

假设我正在构建一个拥有许多博客和用户的引擎。用户可以拥有多个博客,博客也可以拥有多个用户(用户 hasAndBelongsToMany blogs)。我将创建一个名为 users_blogs 的数据透视表,如下所示:

id user_id blog_id role

1 1 1 admin
2 1 2 poster
3 2 2 admin

因此,用户 1 属于博客 1 和 2,用户 2 属于博客 2。用户 1 是博客 1 的管理员,博客 2 的发帖者,用户 2 是博客 2 的管理员。

还会有帖子。 users_blogs 会有很多帖子,帖子也可以有很多 users_blogs。它们将与一个数据透视表连接起来,如下所示:

id users_blog_id post_id
1 2 1
2 3 1

因此,引用 users_blogs,博客 2 上的用户 1 与博客 2 上的用户 2 协作创建了帖子 1。

我对 MVC 比较陌生,所以我想知道 A) 第一个表中的“角色”数据是否位于它应该在的位置? B) 是否有更正确的方法来实现此结构?框架将为我带来魔力,我只是想确保这是有意义的,并且我有正确的命名约定。我正在使用 Cakephp,但我也认为这个问题可以由 Rails 程序员来回答。

谢谢!

最佳答案

看来您走在正确的道路上。如果我理解你的话,事情应该是这样的:

我没有完全理解您的其中一个陈述,因此我假设帖子 属于单个博客像大多数人一样。

第一个问题是,您的“数据透视表”命名约定必须按字母顺序排列 - 因此它应该是 blogs_users,而不是 users_blogs。看起来很小,但否则不会起作用。

协会:

blog hasMany post
post belongsTo blog

user hasAndBelongsToMany blog //allowing more than one user to be associated to a blog
blog hasAndBelongsToMany user

user hasAndBelongsToMany post //allowing more than one user to be associated to a post
post hasAndBelongsToMany user

role hasAndBelongsToMany user //better to keep roles in a table that just a string
user hasAndBelongsToMany role //use 'with'=>'blogs_users' in your association
between user/roll

表格:

users            (id, name, ...etc)
blogs (id, title, ...etc)
roles (id, role)
blogs_users (id, user_id, role_id, blog_id)
posts (id, title, blog_id)
posts_users (id, post_id, user_id)

更新:

我在这方面并不是最擅长的 - 自己仍在学习,但是 - 在我的脑海中,您可以通过以下方式从用户 1 创建的博客 1 中获取帖子:

$blogId = '1';
$userId = '1';
$posts = $this->Post->find('all', array(
'conditions' => array(
'User.id' => $userId,
'Blog.id' => $blogId
)
);

关于mysql - 将数据透视表连接到另一个表(HABTM 连接 HABTM 和模型关联),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6637946/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com