有没有办法在每个页面上列出来自不同作者的帖子。
例如:您选择每页列出10个帖子,这10个帖子应来自不同的作者。
应该使用Laravel Elequent。什么是最好的方式?
答案 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()
非常慢,当你嵌套它时,如果表格很大,则需要花费太多时间来获取数据。