Php 获取Laravel中每个类别的帖子
我使用的是Laravel 4 这是我的控制器:Php 获取Laravel中每个类别的帖子,php,laravel,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', co
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 Post extends Basemodel {
public function category(){
return $this->belongsTo('Category');
}
}
所以它正确地显示了我的6个类别(标题),但它只显示了总共4篇文章,我想显示每个类别的4篇最新文章(总共24篇)。
我尝试了很多东西,并在网上搜索,但找不到解决方法。在“急切加载”闭包中使用
限制
无法做到这一点,因为正如您所注意到的,它限制了获取所有帖子的其他查询
您可以很容易地获得单个相关模型,并通过辅助关系急切加载hasMany
:
public function latestPost()
{
return $this->hasOne('Post')->latest();
}
但是,对于每个父级的n个相关模型,,您需要更复杂的解决方案-请看:
我希望你能写出正确的答案。在检索帖子时,使用$category->posts而不是$category->posts(),这会导致错误 谢谢你的链接。我严格遵循了第二种方法,但是当我想回显
@foreach($categories as$category){{{$category->latestPost()->->title}}@endforeach
时,它给了我未定义的属性:illighted\Database\elount\Relations\HasOne:$title
它不是latestPost()
但是latestPost
-阅读laravel文档中elount
的动态属性。我在foreach
循环中尝试了{{{$category->latestPost->title}
,它返回试图获取非对象的属性。我检查了所有地方,没有错误,我还更新了composer和dump autoload…事实上,我有一些空类别(某些类别中没有帖子),错误可能来自这里,我要检查一下。更新:是的,问题来自那里(空类别)~我为没有早点看到这一点感到遗憾!谢谢你的帮助这是我在一开始所做的,但是如何取消合并这个大数组中的所有帖子,并按类别显示它们。。。?听起来很乱
public function latestPost()
{
return $this->hasOne('Post')->latest();
}