如何在Laravel控制器中迭代foreach并将其传递给视图?

时间:2015-08-20 03:33:02

标签: php laravel-5 blade

我正在尝试构建一个简单的想法跟踪/评论系统,在摘要视图页面上,我想要了解每个帖子的一些细节。目前,帖子和回复都位于一个posts表格中,其中newtopic布尔值用于指定顶级帖子,可居住replyto用于指定评论。

所以我的控制器就像是这样的摘要页面:

public function index()
{
    $ideas = DB::table('posts')->addSelect(DB::raw('*,posts.created_at as pca'))
    ->join('users', 'users.id', '=', 'posts.uid')
    ->where('newtopic','1')->orderBy('posts.id','desc')->get();
    return view('ideas.home', ['ideas' => $ideas]);
}

这很好用,但我还想至少提取评论计数和投票计数,并将摘要信息传递给视图。我看不到在控制器级别执行此操作的好方法,因为@foreach在到达视图之前未触及。我对laravel和一般的MVC模式还不太新,是否需要做一个子控制器/子视图类型来获得所需的结果?

home.blade.php:

@extends('master')

@section('content')
    @foreach($ideas as $idea)
        <div class="container">
            <div class="panel panel-info">
                <div class="panel-heading">
                    <h3 class="panel-title">
                        <a href="{{ 'ideas/'.$idea->id }}">{{ $idea->subject }}</a>
                    </h3>
                </div>
                <div class="panel-body">
                    {{ $idea->content }}
                </div>
                <div class="panel-footer">
                    Posted by {{ $idea->username }} on {{ $idea->pca }}
                </div>
            </div>
        </div>

    @endforeach
@stop

2 个答案:

答案 0 :(得分:2)

给这个镜头,也许你会得到你想要的结果。

$data = Idea::with('users','comments') -> where('newtopic',1) -> orderBy('id','DESC') -> get();

在你的视图中,你会像你一样迭代,

@foreach($ideas as $idea)
  $idea -> user -> username;
  $idea -> comment -> count;
  $idea -> content; 
  $idea -> ...
@endforeach

答案 1 :(得分:1)

->get()使用->toArray()后,您将使用数组进行迭代。