如何在 Laravel 8 中存储多个值
How to Store Multiple Values in Laravel 8
我有两个 table 用户和 role_user。用户注册后,他们将使用基于下图的下拉值从查询中选择多少角色。
当我 'dd' 数据时,即使用户选择了多个角色,它也只会从 role_id 中获取一个值。
我不确定我遗漏了哪一部分。尝试了很多次,但仍然没有得到答案。如果有人愿意提供帮助,我真的很感激。这是我的代码
RegisterController.php
protected function validator(array $data)
{
return Validator::make($data, [
'role_id' => ['required','integer'],
]);
}
public function register(Request $request)
{
$this->validator($request->all())->validate();
event(new Registered($user = $this->create($request->all())));
// $this->guard()->login($user);
$user->attachRole($request->role_id);
if ($response = $this->registered($request, $user)) {
return $response;
}
return $request->wantsJson()
? new JsonResponse([], 201)
: redirect('/dashboard');
// : redirect($this->redirectPath());
}
protected function create(array $data)
{
dd($data);
return User::create([
'role_id' => $data['role_id'],
]);
}
register.blade.php(特定于下拉菜单)
@section('plugins.Select2', true)
<div class="form-group {{ $errors->has('role_id') ? ' has-error' : '' }}">
{!! Form::select('role_id', $users2, 1, ['multiple' => true,'class' => 'form-control select2','placeholder'=>'Sila Pilih...']) !!}
</select>
@if ($errors->has('role_id'))
<span class="help-block">
<strong>{{ $errors->first('role_id') }}</strong>
</span>
@endif
</div>
user.php(型号)
protected $fillable = [
'role_id',
];
public function role()
{
return $this->belongsToMany(Role::class);
}
public function setRoleAttribute($value)
{
$this->attributes['role_id'] = json_encode($value);
}
public function getRoleAttribute($value)
{
return $this->attributes['role_id'] = json_decode($value);
}
我曾经有过同样的需求。
您可以试试这个解决方案。
public function store(Request $request){
$inputs = $request->all();
if(!empty($inputs)){
$admin = new Admin;
$admin->name = isset($inputs['name']) ? $inputs['name'] : '';
$admin->email = isset($inputs['email']) ? $inputs['email'] : '';
$admin->phone = isset($inputs['phone']) ? $inputs['phone'] : '';
$admin->role = json_encode($inputs['role']);
$admin->password = isset($inputs['password']) ? Hash::make($inputs['password']) : '';
if($admin->save()){
return back();
}
}
}
管理员的迁移是
Schema::create('admins', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('phone');
$table->string('email');
$table->string('password');
$table->json('role');
$table->timestamps();
});
角色是json类型。
html 下拉列表是多个类型,带有数组名称
<div class="col-md-6">
<div class="form-group mx-1">
<label class="control-label mb-0 p-0 small-font" for="name">Role</label>
<select name="role[]" class="form-control" id="" multiple>
<option value="">Select</option>
<option value="1">full_access</option>
<option value="2">orders</option>
</select>
</div>
</div>
在此处输入表单。
为用户选择多个角色后
最终输出在这里。
我有两个 table 用户和 role_user。用户注册后,他们将使用基于下图的下拉值从查询中选择多少角色。
当我 'dd' 数据时,即使用户选择了多个角色,它也只会从 role_id 中获取一个值。
我不确定我遗漏了哪一部分。尝试了很多次,但仍然没有得到答案。如果有人愿意提供帮助,我真的很感激。这是我的代码
RegisterController.php
protected function validator(array $data)
{
return Validator::make($data, [
'role_id' => ['required','integer'],
]);
}
public function register(Request $request)
{
$this->validator($request->all())->validate();
event(new Registered($user = $this->create($request->all())));
// $this->guard()->login($user);
$user->attachRole($request->role_id);
if ($response = $this->registered($request, $user)) {
return $response;
}
return $request->wantsJson()
? new JsonResponse([], 201)
: redirect('/dashboard');
// : redirect($this->redirectPath());
}
protected function create(array $data)
{
dd($data);
return User::create([
'role_id' => $data['role_id'],
]);
}
register.blade.php(特定于下拉菜单)
@section('plugins.Select2', true)
<div class="form-group {{ $errors->has('role_id') ? ' has-error' : '' }}">
{!! Form::select('role_id', $users2, 1, ['multiple' => true,'class' => 'form-control select2','placeholder'=>'Sila Pilih...']) !!}
</select>
@if ($errors->has('role_id'))
<span class="help-block">
<strong>{{ $errors->first('role_id') }}</strong>
</span>
@endif
</div>
user.php(型号)
protected $fillable = [
'role_id',
];
public function role()
{
return $this->belongsToMany(Role::class);
}
public function setRoleAttribute($value)
{
$this->attributes['role_id'] = json_encode($value);
}
public function getRoleAttribute($value)
{
return $this->attributes['role_id'] = json_decode($value);
}
我曾经有过同样的需求。 您可以试试这个解决方案。
public function store(Request $request){
$inputs = $request->all();
if(!empty($inputs)){
$admin = new Admin;
$admin->name = isset($inputs['name']) ? $inputs['name'] : '';
$admin->email = isset($inputs['email']) ? $inputs['email'] : '';
$admin->phone = isset($inputs['phone']) ? $inputs['phone'] : '';
$admin->role = json_encode($inputs['role']);
$admin->password = isset($inputs['password']) ? Hash::make($inputs['password']) : '';
if($admin->save()){
return back();
}
}
}
管理员的迁移是
Schema::create('admins', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('phone');
$table->string('email');
$table->string('password');
$table->json('role');
$table->timestamps();
});
角色是json类型。
html 下拉列表是多个类型,带有数组名称
<div class="col-md-6">
<div class="form-group mx-1">
<label class="control-label mb-0 p-0 small-font" for="name">Role</label>
<select name="role[]" class="form-control" id="" multiple>
<option value="">Select</option>
<option value="1">full_access</option>
<option value="2">orders</option>
</select>
</div>
</div>
在此处输入表单。
为用户选择多个角色后