我想做以下事情。
我有三种模式:User
,Business
,Role
它们的连接方式如下:用户可以拥有多个角色,属于多个业务。
角色是预定义的。
我希望每个用户可以在不同的业务中拥有不同的角色。
例如,在business1中,用户具有角色sales manager
,但在business2中,他具有角色director
。用户可以在同一个企业中拥有多个角色。
User
型号:
public function businesses()
{
return $this->belongsToMany('App\Business')->withTimestamps();
}
Business
型号:
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
添加到Business
:
$user->businesses()->attach($business_id, ['role_id' => $roleId]);
这应该将数据透视表中的行添加为:[' 1',' 2',' 3']。
我的问题是:
$user->businesses()->detach($business_id)->where('role_id',$role_id);
这不是正确的语法,但是像这样。如果用户在业务中有两个角色(例如:'导演'和销售经理')在分离时我想删除其中一个角色(例如:&#39导演')而不是所有人。我相信运行$user->businesses()->detach($business_id);
会分离所有角色。sync()
方法?答案 0 :(得分:0)
我最终得到了类似下面的内容。它没有经过测试,因为我的代码有点复杂所以如果您发现任何错误请通知我:
用户模特:
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);
}
我希望我没有错过任何东西。 我在过度思考这个问题时失去了太多时间...... 希望它会帮助别人。
如果您需要更多代码,请在问题新鲜时询问。