Laravel 5 Laravel 5.2,三倍多

Laravel 5 Laravel 5.2,三倍多,laravel-5,many-to-many,pivot-table,Laravel 5,Many To Many,Pivot Table,我想做以下几件事 我有三种模式:用户,业务,角色 它们之间的联系如下:用户可以有多个角色,并且属于多个业务 角色是预定义的 我希望每个用户可以在不同的业务中扮演不同的角色。 例如,在business1中,用户具有角色销售经理,但在business2中,用户具有角色主管。用户可以在同一业务上有多个角色 用户型号: public function businesses() { return $this->belongsToMany('App\Business')->withTim

我想做以下几件事

我有三种模式:
用户
业务
角色

它们之间的联系如下:用户可以有多个角色,并且属于多个业务

角色是预定义的

我希望每个用户可以在不同的业务中扮演不同的角色。 例如,在business1中,用户具有角色
销售经理
,但在business2中,用户具有角色
主管
。用户可以在同一业务上有多个角色

用户
型号:

public function businesses()
{
    return $this->belongsToMany('App\Business')->withTimestamps();
}
   public function users()
    {
        return $this->belongsToMany('App\Business')->withTimestamps();
    }
业务
型号:

public function businesses()
{
    return $this->belongsToMany('App\Business')->withTimestamps();
}
   public function users()
    {
        return $this->belongsToMany('App\Business')->withTimestamps();
    }
数据透视表:

    Schema::create('business_user', function (Blueprint $table) {
        $table->increments('id');
        $table->timestamps();
        $table->integer('business_id')->unsigned();
        $table->integer('user_id')->unsigned();
        $table->integer('role_id')->unsigned();
    });
我将
用户
添加到
业务
中,如下所示:

$user->businesses()->attach($business_id, ['role_id' => $roleId]);
这将在pivot表中添加以下行:['1','2','3']

我的问题是:

  • 这样做对吗
  • 如何继续使用分离方法?
    $user->business()->分离($business\u id)->其中($role\u id',$role\u id)
    这不是正确的语法,而是类似这样的语法。如果用户在detach上的业务中有两个角色(例如:“director”和“sales manager”),我只想删除其中一个角色(例如:“director”),而不是全部。我相信运行
    $user->business()->detach($business\u id)将分离所有角色
  • 有没有办法将
    sync()
    方法与此一起使用

我的结局如下。它没有经过测试,因为我的代码有点复杂,所以如果您发现任何错误,请通知我:

用户模型:

public function roles()
{
    return $this->belongsToMany('App\Role')->withTimestamps();
}
public function businesses()
{
    return $this->belongsToMany('App\Business')->withTimestamps();
}
public function businessesAdmin()
{
    return $this->belongsToMany('App\Business')->withTimestamps()->wherePivot('role_id', $role_id = 'whatever_is_your_businessAdmin_role_id');
}
用户控制器:

function addAdminRole(Request $r) {
    //get the user_id and business_id from the $r
    //define $businessAdminRole_id
    $user->businesses()->sync([$business_id => ['role_id' => $businessAdminRole_id]]);
}

function removeAdminRole(Request $r) {
    $user = User::findOrFail($request->user_id)
    business = $request->business;
    $user->businessesAdmin()->detach($business_id);
}
我希望我没有错过任何东西。 我浪费了太多的时间去想这个。。。 希望它能帮助别人


如果您需要更多代码,请在代码还未更新时询问。

使用范围筛选该用户和该业务的正确角色。你们的关系很好,我想嘿@MikeMiller,最后我发现了,这为我指明了正确的方向,谢谢。