【发布时间】:2015-11-25 20:39:14
【问题描述】:
我正试图弄清楚如何在我的应用中从管理员创建用户时使用模型关系创建用户角色。
我有以下表格:
用户
users 表包含用户列表。
users_roles
users_roles 表是一个将roles 链接到users 的数据透视表。
角色
roles 表包含角色列表。
我正在尝试使用存储库设置,以便我的控制器没有提及 eloquent。
这是我的控制器:
class ContractorController extends Controller
{
private $user;
/**
* Create a new instance.
*
* @return Middleware
*/
public function __construct(UserRepoInterface $user, TimesheetRepoInterface $timesheet)
{
$this->middleware('actions');
$this->user = $user;
$this->timesheet = $timesheet;
}
/**
* Store a newly created resource in storage.
*
* @param Request $request
* @return Response
*/
public function store(CreateUserRequest $request)
{
// create user
$user = $this->user->createUser($request->except('_token'));
// user was created above so we can use $user object
$this->user->createUserRole($user);
return Redirect::back()->withMessage('New user created.');
}
}
我的仓库:
/**
* Create new user role.
*
* @param $request
* @return mixed
*/
public function createUserRole($user)
{
return $this->user->roles()->attach($user);
}
我的用户模型:
/**
* Get the roles associated with the user.
*
* @return Object
*/
public function roles()
{
return $this->belongsToMany('App\Models\User\UsersRoles', 'users_roles', 'role_id', 'user_id');
}
上面的代码导致在users_roles 表中创建了一条记录,这是正确的,但是我不知道如何在表中关联正确的role_id。
这是插入users_roles的数据:
id user_id role_id
1 1 0
如您所见,没有 role_id,因为我不确定如何将其传入。我知道如果我在roles 表中物理创建一个新角色,那么我可以使用这个对象。但是该角色已经存在,所以我只需要将这个新用户与我指定的角色相关联。
请有人指点我如何做到这一点,或者我必须如何调整我的代码?
提前致谢。
【问题讨论】:
-
您的数据透视表
users_roles应该是单数和字母顺序。例如role_user. -
是的,但我已经在我的
belongsToMany方法中提供了表的名称。另外,我正在使用attach()方法,请参见上面的代码。