【问题标题】:Grammar::parameterize() must be of the type arrayGrammar::parameterize() 必须是数组类型
【发布时间】:2019-09-09 17:47:40
【问题描述】:

我收到了这个错误

传递给 Illuminate\Database\Grammar::parameterize() 的参数 1 必须是数组类型,给定字符串,

当我尝试使用选择表单在我的视图中添加 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 变量并给出了一个值数组。

也死掉并转储$request 正如您在此处看到的,我在选择列表中输入了 45 的 id。

【问题讨论】:

  • 请在视图中显示您的 foreach 中 $approver 的值。
  • @JaredEitnier 我更新了我的帖子。 $approver 是一个变量,我将其传递到我的视图中,请参阅。
  • 好的,问题是在您的视图中出现还是在您尝试保存模型时出现?
  • @JaredEitnier 是的,当我在选择表单中添加[] 时,确实会发生此问题。
  • $approver 的实际数据转储 (dd) 是什么?我怀疑那里出了问题,因为我无法使用您的代码在本地重现此问题。

标签: php laravel laravel-5.2


【解决方案1】:

好的,您的问题是您正在尝试将数组保存为奇异值,而您需要在其中迭代批准者。

将您的控制器逻辑更改为:

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

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

【讨论】:

  • 这行得通。但是当我尝试从选择表单中插入两个值时出现问题。它只插入最后选择的?我做了什么我选择了45,但5只被插入了。
  • 当然,所以只需在循环内部而不是外部实例化一个新的Approve 模型。
  • 感谢您解决我的问题。为什么它总是得到最后一个选择?为什么我需要创建一个新实例?
  • 查看你的原始代码。你只声明一个而不是Approve。然后迭代所有$request-&gt;approvers 并在每次迭代时保存Approve 模型。 approver_id 的值每次都会在原始模型上被覆盖,除非您创建新模型。
  • 哦,我知道你在 foreach 循环中包含了这个 :)
【解决方案2】:

就我而言,我想插入批量数据,因此出现错误。 然后我用了

User::insert($arrayData)

我已经完成了。

【讨论】:

    【解决方案3】:

    在我的例子中,我没有在 :-

    中提到这个名字
    $request->input();
    

    所以我只是改变

    $request->input("name");
    

    然后它的作品

    【讨论】:

      【解决方案4】:

      我收到此错误是因为我覆盖了模型中的构造函数。如果这样做,请确保传递参数数组:

        public function __construct(array $attributes = [], $something_else)
        {
          parent::__construct($attributes);
      
          //...
          $this->something_else = $something_else;
        }
      

      【讨论】:

        猜你喜欢
        • 2021-06-30
        • 2019-08-23
        • 2018-03-22
        • 2016-10-12
        • 2021-08-19
        • 2021-02-08
        • 2020-10-15
        • 2018-10-07
        • 2019-09-18
        相关资源
        最近更新 更多