laravel错误:数组到字符串的转换

时间:2018-11-29 04:57:49

标签: php sql laravel jquery-select2

我已经经历了在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函数显示完美结果,但之后显示错误。

enter image description here,在我添加名称为“ 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!!');
}
如果我验证整数'role_id'=>'required | integer',则显示错误enter image description here

迁移与

相同

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

5 个答案:

答案 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)

如果要为您的.js代码输出数组,可以使用

@json($array)

自Laravel 5.5起