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()
非常慢,当你嵌套它时,如果表很大,获取数据可能会花费太多时间。
有没有办法在每一页上列出不同作者的帖子。
例如:您选择每页列出 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()
非常慢,当你嵌套它时,如果表很大,获取数据可能会花费太多时间。