2016-03-30 25 views
0

Ich möchte alle Bilder für jedes Projekt auflisten, ich habe versucht, es so zu machen, aber es gibt immer nur 1 Bild zurück.Wie schleife ich eine Sammlung innerhalb einer Sammlung in Laravel?

public function home() 
{ 
    $projects = Project::all(); //result : 1 

    foreach($projects as $project){ 
     $images = $project->images()->get(); 
     // dd($images); //result : 4 
     foreach($images as $image){ 
      return '<img src="'.$image->image_path.'">'; 
     } 
    } 
} 

der obige Code nur für Testzwecke ist, will ich tun, was ist es in einer Tabelle anzuzeigen, so etwas wie dies in meinem Controller:

<tbody> 
' 
$images = $project->images()->get(); 
foreach($images as $image){ 
' 
<tr> 
<td><img src="'.$image->image_path.'"></td> 
</tr> 
' 
} 
' 
</tbody> 

Antwort

0

Da eine Funktion nur einmal zurückkehren , müssen Sie wahrscheinlich etwas anderes auf der inneren foreach wie Verketten der Bild-HTML zu einer bestehenden Zeichenfolge.

Das gesagt, die richtige Weg, dies zu tun wäre in der Regel zu $ ​​Bilder direkt in einer Vorlage verwendet werden, wo Sie die html erstellen würde.

+0

ja seine für Testzwecke nur, ich es in einer Tabelle angezeigt wird, ich weiß nur nicht, wie um die Variable $ images innerhalb der Variable $ projects zu loopen. – Jason

0

Ich bin mir nicht sicher, was hier alles vor sich geht, aber es sieht so aus, als ob Sie in Laravel etwas relativ Einfaches machen wollen, wenn Sie Controller und Blade Templates verwenden können.

Zuerst Sie mit Ihrem Controller starten (halten alle Ihre Anwendungslogik dort):

// ProjectController.php 
public function home() 
{ 
    //-- grab all the projects, with all of their images 

    // Using with() will allow you to eager load those images 
    // from the database if they are Eloquent relationships. 
    $projects = Project::with('images')->get(); 

    //-- send those $projects to your view 

    // Using with() here will send that variable to your 
    // view accessible by the key. 
    return view('projects')->with(['projects' => $projects]); 
} 

Dann in Blade-Vorlage können Sie leicht über die Projekte und Bilder durchlaufen:

// views/projects.blade.php 

@foreach($projects as $project) 
<table> 
... 
    <tbody> 
    @foreach($project->images as $image) 
     <tr> 
     <td><img src="{{ $image->image_path }}"></td> 
     </tr> 
    @endforeach 
    </tbody> 
... 
</table> 
@endforeach 

</tbody> 

Hoffe, das hilft. Wenn dies alles nicht sinnvoll ist, können Sie immer die Dokumente lesen, sie sind wirklich gut geschrieben!

Laravel Docs

unbedingt die Controller, Blade-Vorlagen und Eloquent ORM überprüfen - Beziehungen Abschnitte :)

+0

Ich gebe eine Datentabelle von meinem Controller zu einer Ansicht zurück, in einer der Spalten möchte ich das ganze Bild mit einer Tabelle auflisten. – Jason

+0

Ich würde immer noch Blade Templating empfehlen, wenn Sie in der Lage sind (vielleicht sogar mit @include zu einer partiellen für die Datentabelle, vielleicht?). Der Aufbau von HTML im Controller ist tendenziell fehleranfällig. Wenn Sie jedoch nur das Problem "nur 1 Abbild wird zurückgegeben" beheben möchten, ist die Antwort von @ Project707 korrekt. Anstatt den Wert in den Bildern foreach zurückzugeben, geben Sie den Wert zurück oder verknüpfen Sie ihn mit dem Ende einer Variablen. – joshwhatk

Verwandte Themen