如何在 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>

在此处输入表单。 为用户选择多个角色后 最终输出在这里。