有沒有辦法在每個頁面上列出不同作者的帖子。Laravel雄辯:如何列出頁面上來自不同作者的帖子?
例如:您選擇每頁列出10篇文章,這10篇文章應該來自不同的作者。
應該使用Laravel Elequent。什麼是最好的方法?
有沒有辦法在每個頁面上列出不同作者的帖子。Laravel雄辯:如何列出頁面上來自不同作者的帖子?
例如:您選擇每頁列出10篇文章,這10篇文章應該來自不同的作者。
應該使用Laravel Elequent。什麼是最好的方法?
一種解決方案是由柱created_at
列定義的作者模型訂購一hasOne
關係。
public function lastPost()
{
return $this->hasOne('Post')->orderBy('created_at', 'desc');
}
然後將查詢將是:
$authors = Author::with('lastPost')->take(10)->get();
我這樣做:
$posts = Post::with('author')->take(10)->get();
當鑑於循環:
@foreach ($posts as $post)
{{ $post->name }}
{{ $post->author->name }}
@endforeach
列表,每頁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()
非常慢,當你嵌套它時,如果表很大,獲取數據可能會花費太多時間。
我通常會選擇前10位作者及他們的帖子,併爲每位作者挑選一位。 – apokryfos
您可以通過author_id選擇帖子組,然後取第10個。 – Sovon