Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在雄辩的存储库设置中设置关系模型的正确方法_Php_Laravel_Laravel 5 - Fatal编程技术网

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

Php 在雄辩的存储库设置中设置关系模型的正确方法,php,laravel,laravel-5,Php,Laravel,Laravel 5,我正试图弄清楚,当在我的应用程序中从管理员创建用户时,如何使用模型关系创建用户角色 我有以下表格: 用户 users表包含用户列表 用户\u角色 users\u roles表是一个数据透视表,它将角色链接到用户 角色 角色表包含角色列表 我试图使用一个存储库设置,这样我的控制器就不会提到雄辩 这是我的控制器: class ContractorController extends Controller { private $user; /** * Create a ne

我正试图弄清楚,当在我的应用程序中从管理员创建用户时,如何使用模型关系创建用户角色

我有以下表格:

用户

users
表包含用户列表

用户\u角色

users\u 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);
}
我的用户模型:

/**
 * 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\u roles
表中创建了一条正确的记录,但是我不知道如何在表中关联正确的role\u id

以下是插入到
用户\u角色中的数据:

id    user_id    role_id
1     1          0
正如您所看到的,没有角色id,因为我不确定如何传递此信息。我知道如果我在
roles
表中物理地创建一个新角色,那么我可以使用这个对象。但是角色已经存在,所以我只需要将这个新用户与我指定的角色关联起来

请有人告诉我怎么做,或者怎么调整代码


提前感谢。

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

$this->user->createUserRole($user);
与此相反,它应该是您希望附加到用户的角色

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

对于希望执行相同操作的任何人,我最终通过将用户id和角色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\u id
以及
user\u id
添加到
users\u roles
表中。

透视表
users\u roles
应为单数和字母顺序。e、 g.
role\u user
。是的,但是我已经在我的
belongTomany
方法中提供了表的名称。另外,我正在使用
attach()
方法,请参见上面的代码。好的,但如果我这样做,那么用户角色表中的用户id是空的,我如何附加用户id?您的用户模型中有
roles
关系,因此当您应用
createUserRole
时,它将从模型中获取用户id。这是我想的,但我得到
SQLSTATE[23000]:完整性约束冲突:1048列“角色id”不能为空(SQL:插入到
users\u roles`(
角色id
用户id
)值(,2))`您可以看到