Laravel-我有一个用户模型,它有不同的角色.如何在具有特定角色的用户之间建立关系


Laravel - I have a User model that has different roles. How to make a relationship between users with certain roles?

我在Laravel 5.2中有一个用户模型和一个角色模型。在我的角色中,我有学生和老师。每个学生都有很多老师,反之亦然。如何将它们链接起来?

首先,您需要创建三个表roles-users-role_user,请参见以下内容:

角色表:

    Schema::create('roles', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
    });

然后用户表

    Schema::create('users', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
        $table->string('email')->unique();
        $table->rememberToken();
        $table->timestamps();
    });

用户角色表

Schema::create('user_role', function (Blueprint $table) {
    $table->bigInteger('user_id')->unsigned();
    $table->integer('role_id')->unsigned();
    $table->foreign('user_id')
        ->references('id')->on('users');
    $table->foreign('role_id')
        ->references('id')->on('roles');
});

创建角色模型:

class Role extends Model
{
    protected $table = 'roles';
    public $timestamps = false;
    public function users() {
        return $this->belongsToMany(User::class, 'user_role');
    }
}

然后将角色关系添加到用户模型

class User extends Authenticatable {
    protected $table = 'users';
    public function roles() {
        return $this->belongsToMany(Role::class, 'user_role');
    }
}

为了给用户一个角色,

$user = User::findOrFail(1); //lets say for user 1
$user->roles()>attach(Role::where('name', 'Teacher')->first());