我已经经历了在youtube,stakoverflow和其他网站上可以找到的所有解决方案。我正在使用Select2添加多个角色,但始终出现相同的错误。
<select id="role" name="role_id[]" multiple='multiple'
class="form-control js-example-basic-multiple">
@foreach($roles as $role)
<option value="{{$role->id}}">{{$role->name}}</option>
@endforeach
</select>
DD函数显示完美结果,但之后显示错误。
,在我添加名称为“ role_id []”的[]之前,它可以正常工作。 形式动作如下。
public function store(Request $request)
{
$this->validate($request, [
'name'=> 'required|string|max:225',
'status'=> 'required',
'role_id'=> 'required',
'email'=> 'required|string|email|max:225|unique:users',
'password'=> 'required|string|min:6|confirmed'
]);
$password = Hash::make($request->password);
// dd($request->all());
$user = new User;
$user->name = $request->name;
$user->status = $request->status;
$user->role_id = $request->role_id;
$user->email = $request->email;
$user->password = $password;
$user->remember_token;
$user->save();
// $user->roles()->sync($request->roles, false);
return back()->with('message', 'User added successfully!!');
}
迁移与
相同
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->unsignedInteger('role_id')->default(1);
$table->boolean('status')->default(0);
$table->string('email')->unique();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
答案 0 :(得分:2)
问题:
$request->role_id
是一个数组。没有一个数据。
建议:
这里有两件事
您与用户分配多个规则
您不应将规则存储在用户表中
您应该这样做:
创建另一个表来存储用户角色
并分别存储用户规则
示例:
$user = new User;
$user->name = $request->name;
$user->status = $request->status;
$user->email = $request->email;
$user->password = $password;
$user->remember_token;
$user->save();
$roleAssigns = [];
foreach($request->role_id as $role){
$roleAssigns[] = [
'role_id' => $role,
'user_id' => $user->id
]
}
//UserRole is the model of user_roles table
UserRole::insert($roleAssigns);
答案 1 :(得分:1)
由于您具有角色的数据透视表,因此您的用户表中不需要role_id列
public function store(Request $request)
{
$this->validate($request, [
'name'=> 'required|string|max:225',
'status'=> 'required',
'role_id'=> 'required|array',
'email'=> 'required|string|email|max:225|unique:users',
'password'=> 'required|string|min:6|confirmed'
]);
$password = Hash::make($request->password);
// dd($request->all());
$user = new User;
$user->name = $request->name;
$user->status = $request->status;
$user->email = $request->email;
$user->password = $password;
$user->remember_token;
$user->save();
foreach($request->input('role_id') as $role)
{
$user->assign($role);
}
// $user->roles()->sync($request->roles, false);
return back()->with('message', 'User added successfully!!');
}
答案 2 :(得分:1)
$request->role_id
是数组,因此您不能将数组直接存储到数据库中,因此可以使用以下命令,
$user->role_id = json_encode($request->role_id);
稍后您可以使用json_decode
函数来获取role_id数组。
答案 3 :(得分:0)
您无法“回显”数组,这就是错误。
您将需要收集数组中的行,然后返回该数组
答案 4 :(得分:0)