2016-08-15 8 views
3

ich diesen Fehler bekamGrammatik :: parametrieren() muss vom Typ Array sein

Argument 1 übergeben \ Database \ Grammatik Illuminate :: parametrierbaren() muss vom Typ Array, String angegeben,

wenn ich versuchte, fügen Sie array[] in meiner Ansicht mit Auswahlformular. Aber als ich es entfernte, habe ich keinen Fehler bekommen. Ich versuche nur, einen Mehrfachwert in meine Auswahlliste einzugeben. Muss ich dafür foreach verwenden?

Ansicht

<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> 

-Controller

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

} 

aktualisieren

ich sterben und Dump die $approver Variable und gibt eine Reihe von Wert.

SC

auch sterben und die $request Dump Wie man hier sehen kann ich Eingabe der ID von und in meiner Auswahlliste.

SC

+0

zeigen Bitte den Wert von '$ approver' von Ihrem foreach in der Ansicht. –

+0

@JaredEitnier Ich habe meinen Beitrag aktualisiert. '$ approver' ist eine Variable, an die ich diese in meiner Sicht übergeben habe. – Francisunoxx

+0

Ok, tritt das Problem in Ihrer Sicht auf oder wenn Sie versuchen, Ihre Modelle zu speichern? –

Antwort

4

Ok, Ihr Problem ist, dass Sie versuchen, ein Array als ein singulärer Wert zu speichern, wo man statt über den Genehmiger laufen müssen.

Ihre Controller-Logik ändern, um dies zu:

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

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

Das funktioniert. Aber ich habe ein Problem, als ich versuchte, einen zwei Wert aus dem ausgewählten Formular einzufügen. Es fügt nur das zuletzt ausgewählte ein? Was ich tat, wählte ich "4" und "5", aber "5" wurde nur eingefügt. – Francisunoxx

+0

Sicher, also instanziieren Sie ein neues "Genehmigen" -Modell innerhalb der Schleife, anstatt von außen. –

+0

Danke für die Lösung meines Problems. Warum bekommt es immer das letzte ausgewählt? Warum muss ich eine neue Instanz erstellen? – Francisunoxx

Verwandte Themen