代码之家  ›  专栏  ›  技术社区  ›  shaebi

Laravel雄辩:如何在页面上列出不同作者的帖子?[已关闭]

  •  1
  • shaebi  · 技术社区  · 8 年前

    有没有办法在每个页面上列出不同作者的帖子。

    应使用Laravel Elequent。最好的方法是什么?

    3 回复  |  直到 8 年前
        1
  •  1
  •   kerrin    8 年前

    一种解决方案是定义 hasOne 作者模型按帖子排序的关系 created_at

    public function lastPost()
    {
        return $this->hasOne('Post')->orderBy('created_at', 'desc');
    }
    

    那么您的查询将是:

    $authors = Author::with('lastPost')->take(10)->get();
    
        2
  •  1
  •   Alexey Mezenin    8 年前

    每页列出10篇文章,这10篇文章应该来自不同的作者

    Post::inRandomOrder()->groupBy('user_id')->take(10)->get();
    

    我已经测试过了,它会给你想要的。然而,它总是为每个作者提供相同的帖子。因此,作者总是随机的,但每个作者的帖子总是一样的。

    另一个解决方案是使用 hasOne 关系:

    public function singlePost() {
        return $this->hasOne(Post::class);
    }
    

    然后:

    Author::inRandomOrder()->with('singlePost')->take(10)->get();
    

    如果你想随机获得10位作者的帖子,请创建另一个关系:

    public function randomPost() {
        return $this->hasOne(Post::class)->inRandomOrder();
    }
    

    然后:

    Author::inRandomOrder()->with('randomPost')->take(10)->get();
    

    inRandomOrder() 速度相当慢,当你嵌套它时,如果表很大,那么获取数据可能需要太多时间。

        3
  •  0
  •   5less    8 年前

    $posts = Post::with('author')->take(10)->get();
    

    在视图中循环时:

    @foreach ($posts as $post)
        {{ $post->name }}
        {{ $post->author->name }}
    @endforeach
    
    推荐文章