语法::参数()必须是类型阵列

问题描述:

我得到这个错误语法::参数()必须是类型阵列

参数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变量和给出的值的数组。

SC

也死不了并转储$request正如你可以在这里看到我输入的和我在选择列表中的ID。

SC

+0

请从您的视图显示的foreach的'$ approver'值。 –

+0

@JaredEitnier我更新了我的帖子。 '$ approver'是一个变量,我将它传递给我的视图请看。 – Francisunoxx

+0

好的,您的观点或您尝试保存模型时发生的问题也是如此? –

好吧,你的问题是,你要保存的数组,你需要遍历的审批,而不是一个奇异值。

各地更改您的控制器逻辑是:

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

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

这起作用。但是当我试图从选择表单插入两个值时,我遇到了一个问题。它只插入最后选择的?我做了什么,我选择了'4'和'5',但是'5'只被插入。 – Francisunoxx

+0

当然,所以只需在循环内部实例化一个新的'Approve'模型,而不是在外部。 –

+0

感谢您解决我的问题。为什么它总是得到最后的选择?为什么我需要创建一个新的实例? – Francisunoxx