5

假设我有三个表用户,users_groups 和 groups。如何通过 users_groups 表获取用户组?

class User extends Eloquent {
    protected $table = 'users';
}

class Groups extends Eloquent {
    protected $table = 'groups';
}

class Usergroups extends Eloquent {
    protected $table = 'users_groups';
}
4

1 回答 1

8

根据您的要求,我为您的特定用例整理了一个简单的示例:

表格:

Eloquent 建议在这种情况下创建 3 个数据库表usersgroupsgroup_user.

Laravel文档指出:

group_user表的名称源自相关模型名称的 aplhabetical 顺序。

group_user表应包含列user_idgroup_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 文档中阅读有关数据透视表的更多信息,以及在此处迁移中定义外键(用于数据透视表)。

我希望这会有所帮助!

于 2013-08-25T13:24:32.697 回答