2017-01-15 5 views
1

Erste Fehlermeldung von Laravel foreach-Schleife:Fehler von Laravel foreach Schleife

Invalid argument supplied for foreach() 

Meine foreach-Schleife ist:

@foreach ($task as $tasks) 

    <td>{{$tasks->name}}</td> 

@endforeach 

Mein Controller ist:

public function show($id){ 
    $task = Task::find($id); 

    return view('tasks.show')->withTask($task); 
; 
} 
+1

Umm Wegthema vielleicht aber warum haben Sie, dass zusätzliche Semikolon in dir Controller? On-topic ist deine '$ task' ** traversable **? 'dd ($ task)' vor dem foreach inside blade. – Mihailo

+0

@Mihailo das war nicht außerhalb des Themas Kumpel. –

+0

@ linuxartisans Antwort ist korrekt. Sie können nicht erwarten, eine Sammlung von '$ task = Task :: find ($ id);' zu erhalten.Es gibt nur das passende 'Task'-Objekt zurück – Gayan

Antwort

1

ich nie gesehen Stellen Sie Variable wie Sie ein, versuchen Sie diese

return view('tasks.show')->with('task', $task); 
0

die foreach Variablen umkehren

@foreach ($tasks as $task) 
    <td> {{ $task->name }} </td> 
@endforeach 
0

du schreiben soll. Dadurch wird Ihr Problem

Der Controller

public function show($id){ 
    $task = Task::findOrFail($id); 

    return view('tasks.show', compact('task')); 
} 

Da wird es nur einen Wert, so dass keine Notwendigkeit lösen foreach zu verwenden. Sie sollten dies schreiben

<td>{{$tasks->name}}</td> 

Die findOrFail-Methode gibt nur einen Wert zurück. Also keine Notwendigkeit, es zu loopen. Hoffentlich wird dies Ihr Problem lösen.

2

Sie geben der foreach Schleife einen falschen Datentyp.

Eine foreach erfordert eine array oder eine Collection.

Die Aussage

$task = Task::find($id); 

Sie ein Task Modell (kein Collection) geben wird. Daher können Sie nicht darüber iterieren.

Auch da Sie die Task Ressource angezeigt werden versuchen, (vorausgesetzt, dies ist, wie Sie show() Funktion der Steuerung aufrufen), brauchen Sie nicht über das Modell zu durchlaufen - wie Sie eine einzelne Entität Attribute anzeigt wird.


Sie einfach diesen

Controller:

public function show($id){ 
    $task = Task::find($id); 

    return view('tasks.show', compact('task')); 
} 

Nach Ansicht:

Name: {{ $task->name }} 
// other attributes here 
Verwandte Themen