2016-03-30 109 views
0

我想列出每個項目的所有圖像,我試圖這樣做,但它總是隻返回1個圖像。如何在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.'">'; 
     } 
    } 
} 

上面的代碼只是爲了測試的目的,我想要做的就是在一個表在我的控制器顯示它,像這樣:

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

回答

0

由於函數只能退回一次,你可能需要在內部foreach上做一些不同的事情,比如將image html連接到現有的字符串。

也就是說,正確的這樣做的方式通常是返回$圖像直接在模板中,你會建立的HTML。

+0

是它只是爲了測試的目的,我將在一個表中顯示它,我只是不知道如何在$ projects變量中循環$ images變量。 – Jason

0

我不確定這裏發生了什麼,但是如果您能夠使用控制器和刀片模板,看起來您希望在Laravel中執行相對簡單的操作。

首先,你開始你的控制器(保留所有的應用程序邏輯的存在):

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

// 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]); 
} 

然後,在你的刀模板,你可以輕鬆地在項目和圖像重複

希望這有助於。如果沒有一個是合理的,你可以隨時查看文檔,他們寫得很好!

Laravel Docs

一定要檢查出的控制器,刀模板和雄辯的ORM - 關係部分:)

+0

我從我的控制器返回一個數據表到一個視圖,在我希望列出所有圖像的列之一。 – Jason

+0

如果可以的話,我仍然會推薦使用刀片模板(甚至可以使用@include作爲數據表的一部分,也許是?)。在Controller中構建HTML往往容易出錯。 但是,如果您只是想修復「只返回1張圖片」的問題,@ Project707的回答是正確的。除了返回圖像foreach中的值之外,還可以回顯該值或將其連接到變量的結尾。 – joshwhatk