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

时间:2017-10-08 08:50:43

标签: php database laravel laravel-5 laravel-eloquent

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

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

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

3 个答案:

答案 0 :(得分:0)

我会这样做:

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

在视图中循环时:

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

答案 1 :(得分:0)

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

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

然后你的查询将是:

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

答案 2 :(得分:0)

  

每页列出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()非常慢,当你嵌套它时,如果表格很大,则需要花费太多时间来获取数据。