如何在laravel中集合集合?

时间:2016-03-30 17:28:45

标签: php laravel-5.2

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

2 个答案:

答案 0 :(得分:0)

由于函数只能返回一次,因此您可能需要在内部foreach上执行不同的操作,例如将图像html连接到现有字符串。

那就是说,正确这样做的方法通常是返回$ images直接用在你构建html的模板中。

答案 1 :(得分:0)

我不确定这里发生了什么,但是如果你能够使用控制器和刀片模板,看起来你想在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 - 关系部分:)