在Laravel中获取关于foreach类别的帖子

时间:2014-09-15 23:52:21

标签: php laravel

我正在使用Laravel 4

这是我的控制器:

public function getArticles()
{
    $categories = Category::with(['posts' => function($query){
        $query->orderBy('updated_at', 'DESC')->take(4)->get();
    }])->get();

    return View::make('articles', compact('categories'));
}

这是我的观点:

    @foreach($categories as $category)
        <h1>{{$category->title}}</h1>
        <ul>
            @foreach($category->posts as $post)
            <li>
                <a href="{{ $post->url() }}">{{ $post->title }}</a>
            </li>
            @endforeach
        </ul>
    @endforeach

我的分类模型:     

class Category extends Basemodel {
    public function posts(){
        return $this->hasMany('Post');
    }
}

我的帖子模型:

class Post extends Basemodel {
    public function category(){
        return $this->belongsTo('Category');
    }
}

所以它正确显示我的6个类别(标题),但它只显示4个帖子总数,我想显示每个类别的4个最新帖子(总共24个帖子)。 我尝试了很多东西,并在网上搜索,但无法找到解决方法。

2 个答案:

答案 0 :(得分:1)

你不能在急切的加载闭包中使用limit来做到这一点,因为正如你所注意到的那样,它限制了另一个获取所有帖子的查询。

您可以轻松获得具有辅助关系的hasMany的热切加载的单个相关模型:

public function latestPost()
{
  return $this->hasOne('Post')->latest();
}

但是对于 n每个父母的相关模型,您需要更复杂的解决方案 - 请看一下:

  1. n per parent

  2. 1 per parent

答案 1 :(得分:0)

  1. 也许你可以使用$ categories = Category :: all()来获取所有类别。
  2. foreach $ categories并按$ posts = $ category-&gt; posts
  3. 获取最新的四个帖子
  4. 将posts数组合并为一个数组
  5. 将类别和帖子传递给视图。
  6. 干杯。

    我希望你能写出正确的foreach。在检索帖子时,请使用$ category-&gt;帖子而不是$ category-&gt; posts(),这会导致错误。