根据您的要求,我为您的特定用例整理了一个简单的示例:
表格:
Eloquent 建议在这种情况下创建 3 个数据库表:users、groups 和 group_user。
Laravel documentation 声明:
group_user 表的名称源自相关模型名称的 aplhabetical 顺序。
group_user 表应包含 user_id 和 group_id 列,其中将包含组和用户条目的主键。 group_user 表就是所谓的数据透视表。
这符合3NF(如果您有兴趣)。
模型:
User 模型应包含以下代码:
<?php
class User extends Eloquent {
//...Other code…
public function groups()
{
return $this->belongsToMany('Group');
}
}
Group 模型应包含以下代码:
<?php
class Group extends Eloquent {
//...Other code…
public function users()
{
return $this->belongsToMany('User');
}
//...Other code…
}
您确实不需要需要在您的问题中找到的UserGroup 模型。
用法:
为了检索特定用户所属的所有组,您需要执行以下操作:
$user = User::find($user_id);
$user_groups = $user->groups();
类似地,为了检索属于特定组的所有用户,您需要执行以下操作:
$group = Group::find($group_id);
$group_users = $group->users();
为了将用户添加/删除到组中,需要执行以下操作:
$user = User::find($user_id);
//Add a user
$user->groups()->attach($group_id);
//Detach a user
$user->groups()->detach($group_id);
其他:
您应该阅读 Laravel 文档中有关数据透视表 here 以及在迁移中定义外键(用于数据透视表)的更多信息 here。
希望对你有帮助!