我想列出每个项目的所有图像,我试过这样做,但它总是只返回1个图像。
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>
由于函数只能返回一次,您可能需要对内部foreach执行一些不同的操作,比如将图像html连接到现有字符串。
也就是说,正确的方法通常是返回$images,以便在构建html的模板中直接使用。
我不确定这里发生了什么,但如果你能够使用控制器和刀片模板,你似乎想在Laravel中做一些相对简单的事情。
首先,您从控制器开始(将所有应用程序逻辑保留在那里):
// 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]);
}
然后,在您的刀片模板中,您可以轻松地迭代项目和图像:
// 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>
希望这能有所帮助。如果这些都没有意义,你可以随时查看文档,它们写得真的很好!
Laravel Docs
请务必查看控制器、刀片模板和Eloquent ORM-关系部分:)