Laravel Eloquent: 如何在一个页面上列出不同作者的帖子?

Laravel Eloquent: how to list posts from different authors on a page?

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

例如:您选择每页列出 10 个帖子,这 10 个帖子应该来自不同的作者。

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

我会这样做:

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

在视图中循环时:

@foreach ($posts as $post)
    {{ $post->name }}
    {{ $post->author->name }}
@endforeach

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

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

那么您的查询将是:

$authors = Author::with('lastPost')->take(10)->get();

List 10 posts per page, and these 10 posts should be from different authors

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

我已经测试过了,它会给你你想要的。但是,对于每个作者,它总是会为您提供相同的 post。所以,作者总是随机的,但每个作者的 post 总是相同的。

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

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

然后:

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

如果您想为 10 位随机作者获得随机 post,请创建另一个关系:

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

然后:

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

这里要小心,因为 inRandomOrder() 非常慢,当你嵌套它时,如果表很大,获取数据可能会花费太多时间。