我正在使用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个帖子)。 我尝试了很多东西,并在网上搜索,但无法找到解决方法。
答案 0 :(得分:1)
你不能在急切的加载闭包中使用limit
来做到这一点,因为正如你所注意到的那样,它限制了另一个获取所有帖子的查询。
您可以轻松获得具有辅助关系的hasMany
的热切加载的单个相关模型:
public function latestPost()
{
return $this->hasOne('Post')->latest();
}
但是对于 n每个父母的相关模型,您需要更复杂的解决方案 - 请看一下:
答案 1 :(得分:0)
干杯。
我希望你能写出正确的foreach。在检索帖子时,请使用$ category-&gt;帖子而不是$ category-&gt; posts(),这会导致错误。