在Eloquent存储库设置中设置关系模型的正确方法


The proper way to setup relationship models in Eloquent repository setup

我试图找出如何使用模型关系创建用户角色时,用户从admin在我的应用程序中创建。

我有以下表格:

users表保存了一个用户列表。

users_roles

users_roles表是连接rolesusers的透视表。

roles表包含一个角色列表。

我正在尝试使用存储库设置,以便我的控制器没有提到雄辩。

这是我的控制器

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);
}

My User model:

/**
 * 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表中创建一个新角色,那么我可以使用这个对象。但是这个角色已经存在,所以我只需要将这个新用户与我指定的角色关联起来。

请有人告诉我如何做到这一点,或者我该如何调整我的代码?

你应该传递角色数组而不是用户数组

$this->user->createUserRole($user);

而不是这个,它应该是你想要与用户附加的角色

$this->user->createUserRole($roles);//$roles array

对于任何希望做同样事情的人,我终于设法通过将user_id以及role_id发送到我的存储库来使其工作,就像这样:

$this->user->createUserRole($this->role->findRoleByName('Contractor')->id, $user->id);

然后在我的存储库中,我做了以下操作:

/**
 * Create new user role.
 *
 * @param $role
 * @param $user
 * @return mixed
 */
public function createUserRole($role, $user)
{
    return $this->user->roles()->attach($role, ['user_id' => $user]);
}

role_iduser_id添加到users_roles表中。