Grammar :: parameterize() должен быть из массива типов

Я получил эту ошибку

Аргумент 1, передаваемый в Illuminate\Database\Grammar :: parameterize(), должен иметь тип массива, заданная строка,

когда я попытался добавить array[] в моем представлении, используя форму выбора. Но когда я удалил его, я не получил никакой ошибки. Я просто пытаюсь ввести несколько значений в моем списке выбора. Нужно ли использовать foreach для этого?

Посмотреть

<div class = "form-group {{ $errors->has('approver') ? ' has-error' : '' }}">

    <label for = "approver" class = "control-label">Approver:</label>

    <select name = "approver[]" multiple class = "form-control select2-multi">

        @foreach ($approver as $list)
            <option value = "{{ $list->id }}">{{ $list->username }}</option>
        @endforeach

    </select>

    @if ($errors->has('approver'))
        <span class = "help-block">{{ $errors->first('approver') }}</span>
    @endif

</div>

контроллер

public function getDocuments()
{
   $approver = DB::table('users')->where('id', '!=', Auth::id())->get();

   return view ('document.create')->with('approver', $approver);
}

public function postDocuments(Request $request)
{

    $this->validate($request,
    [
        'title' => 'required|regex:/(^[A-Za-z0-9 ]+$)+/|max:255',
        'content' => 'required',
        'category' => 'required',
        'recipient' => 'required',
        'approver' => 'required',
    ]);     


    $document = new Document();
    $approve = new Approve();
    $user = Auth::user();
                                //Request in the form
    $document->title = $request->title;
    $document->content = $request->content;
    $document->category_id = $request->category;
    $approve->approver_id = $request->approver;

    $approve->save();

    $document->save();

    $document->sentToApprovers()->sync([$approve->id],false);

}

Обновить

Я умираю и сбрасываю переменную $approver и даю массив значений.

SC

Также умрите и сбросьте $request Как вы можете видеть здесь, я ввел id 4 и 5 в мой список выбора.

SC

Ответы

Ответ 1

Хорошо, ваша проблема заключается в том, что вы пытаетесь сохранить массив как единственное значение, в котором вам нужно вместо этого использовать итерацию.

Измените логику контроллера следующим образом:

foreach ($request->approver as $approver) {
    $approve              = new Approve();
    $approve->approver_id = $approver;
    $approve->save();

    $document->sentToApprovers()->sync([$approve->id],false);
}

Ответ 2

В моем случае я не упоминаю имя в: -

$request->input();

так что я просто изменяюсь с

$request->input("name");

тогда его работы

Ответ 3

Я получаю ту же ошибку при отправке писем в laravel. Письма отправляются, но после этого страница выдает ту же ошибку. В чем может быть возможная проблема?

Ответ 4

В моем случае я хотел вставить объемные данные, поэтому я получил ошибку. Тогда я использовал

User::insert($arrayData)

и я готов.

Ответ 5

Я получил эту ошибку, потому что я переписал конструктор в модели. Если вы это сделаете, обязательно передайте массив arguments:

  public function __construct(array $attributes = [], $something_else)
  {
    parent::__construct($attributes);

    //...
    $this->something_else = $something_else;
  }