如何在laravel中循环集合内部的集合


how to loop a collection inside a collection in laravel?

我想列出每个项目的所有图像,我试过这样做,但它总是只返回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-关系部分:)