我正在尝试使用 Laravel 5.3 在我的项目中注册时管理(初始)用户的角色。我已经第一次让它工作了,但我不得不添加另一个表,现在我迷路了。
我有 4 个表,Company、User、Role 和一个用于用户和角色的数据透视表名为Role_Users
公司表有comp_id
用户表有comp_id、user_id
角色表有role_id、role_desc
Role_Users 表有comp_id、user_id、role_id
用户模型
class User extends Model implements Authenticatable{
public function company(){
return $this->belongsTo('App\Company', 'comp_id');
}
public function roles(){
return $this->belongsToMany('App\Role', 'role_users', 'user_id', 'role_id')->withTimeStamps();
}
}
榜样
class Role extends Model{
public function users(){
return $this->belongsToMany('App\User', 'role_users')->withTimeStamps();
}
public function comp(){
return $this->belongsToMany('App\Company', 'role_users')->withTimeStamps();
}
}
公司模式
class Company extends Model{
protected $primaryKey = 'comp_id';
public function members(){
return $this->hasMany('App\User', 'comp_id');
}
public function roles(){
return $this->hasMany('App\Role', 'role_users')->withTimeStamps();
}
}
系统是这样的:
each **User** belongs to many **Role**
each **Role** belongs to many **User**
User、Role 和 Role_Users 部分之间的关系已经正常工作。但我不得不更改并向每个表添加一个公司字段,因为它会被许多想试用该程序的公司使用。
each **Company** has many **User**
each **User** belongs to **Company**
我正在尝试像这样使用 attach():
账户管理员
public function setupaccountcomplete($comp, $user){
$comp_id = $comp;
$user_id = $user;
$updateData = [];
$updateData['user_id'] = $user_id;
$updateData['user_sex'] = Input::get('user_sex');
$updateData['user_civilstatus'] = Input::get('user_civilstatus');
$updateData['user_birthday'] = Input::get('user_bday');
$updateData['user_birthplace'] = Input::get('user_bplace');
$updateData['user_address'] = Input::get('user_address');
$updateData['user_mobile'] = Input::get('user_mobile');
$updateData['user_landline'] = Input::get('user_landline');
$updateData['user_email'] = Input::get('user_email');
$updateData['user_zip'] = Input::get('user_zip');
$updateData['user_nationality'] = Input::get('user_nationality');
$updateData['user_religion'] = Input::get('user_religion');
$updateData['user_educAttain'] = Input::get('user_educAttain');
$updateData['user_school'] = Input::get('user_school');
$updateData['user_schooladdress'] = Input::get('user_schooladdress');
$updateData['user_addedby'] = $user_id;
$updatesql = DB::table('users')
->where('user_id', '=', $updateData['user_id'])
->update(['user_sex' => $updateData['user_sex'],
'user_civilstatus' => $updateData['user_civilstatus'],
'user_bday' => $updateData['user_birthday'],
'user_bplace' => $updateData['user_birthplace'],
'user_address' => $updateData['user_address'],
'user_mobile' => $updateData['user_mobile'],
'user_landline' => $updateData['user_landline'],
'user_landline' => $updateData['user_landline'],
'user_zip'=> $updateData['user_zip'],
'user_religion'=> $updateData['user_religion'],
'user_nationality' => $updateData['user_nationality'],
'user_educAttain' => $updateData['user_educAttain'],
'user_school' => $updateData['user_school'],
'user_schooladdress' => $updateData['user_schooladdress'],
'user_addedby' => $updateData['user_addedby']
]);
$user = User::find($user_id);
$user->roles()->attach(Role::where('role_desc', 'Superadmin')->first());
return Redirect::route('setupcooperative', array('comp' => $comp_id, 'user' => $user_id));
}
在我的 AccountController 中,用户的 role_id 为“1”,但 comp_id 为空。
有人可以帮助我吗?我认为我在模型中的关系是错误的。此外,当我尝试执行此行时,我收到了一个 Call to undefined method Illuminate\Database\Query\Builder::roles():
$user->company()->roles()->attach(Role::where('role_desc', 'Superadmin')->first());
最佳答案
如 Laravel 文档中所述,attach()
获取您要附加的角色的 ID,而不是角色本身:
https://laravel.com/docs/5.3/eloquent-relationships#updating-many-to-many-relationships
$user->roles()->attach(Role::where('role_desc', 'Superadmin')->first());
应该是:
$user->roles()->attach(Role::where('role_desc', 'Superadmin')->get('id')->first());
关于php - 如何连接具有不同关系的多个表并在 Laravel 5.3 中使用 attach(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41573368/