Ошибка laravel: преобразование массива в строку - PullRequest
0 голосов
/ 29 ноября 2018

Я ознакомился с каждым решением, которое смог найти на 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();
        });
    }

Ответы [ 4 ]

0 голосов
/ 27 февраля 2019

Вы не можете "повторить" массив, это ошибка.

вам нужно будет собрать строки в массив, а затем вернуть этот массив

0 голосов
/ 29 ноября 2018

$request->role_id - это массив, поэтому вы не можете сохранить массив в базе данных напрямую, поэтому вы можете использовать следующее,

  $user->role_id = json_encode($request->role_id);

Позже вы можете использовать функцию json_decode, чтобы получить массив role_id.

0 голосов
/ 29 ноября 2018

Проблема:

$request->role_id - это массив.ни единой информации.

Предложение:

Здесь две вещи

Вы назначаете несколько правил пользователю

Вы не должны хранить свои правила в пользователяхtable

Вы должны сделать это следующим образом:

создать другую таблицу для хранения роли пользователя

и отдельно хранить пользовательские правила

Пример:

      $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);
0 голосов
/ 29 ноября 2018

Поскольку у вас есть сводная таблица для ролей, вам не нужен столбец 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!!');
}
...