Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 获取Laravel中每个类别的帖子_Php_Laravel - Fatal编程技术网

Php 获取Laravel中每个类别的帖子

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

我使用的是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 Post extends Basemodel {
    public function category(){
        return $this->belongsTo('Category');
    }
}
所以它正确地显示了我的6个类别(标题),但它只显示了总共4篇文章,我想显示每个类别的4篇最新文章(总共24篇)。
我尝试了很多东西,并在网上搜索,但找不到解决方法。

在“急切加载”闭包中使用
限制
无法做到这一点,因为正如您所注意到的,它限制了获取所有帖子的其他查询

您可以很容易地获得单个相关模型,并通过辅助关系急切加载
hasMany

public function latestPost()
{
  return $this->hasOne('Post')->latest();
}
但是,对于每个父级的n个相关模型,,您需要更复杂的解决方案-请看:

  • 也许您可以使用$categories=Category::all()首先获取所有类别
  • foreach$categories并通过$posts=$categority->posts获取最新的四篇帖子
  • 将posts数组合并到一个数组中
  • 将类别和帖子传递给视图
  • 干杯


    我希望你能写出正确的答案。在检索帖子时,使用$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();
    }