2017-10-08 66 views
0

有沒有辦法在每個頁面上列出不同作者的帖子。Laravel雄辯:如何列出頁面上來自不同作者的帖子?

例如:您選擇每頁列出10篇文章,這10篇文章應該來自不同的作者。

應該使用Laravel Elequent。什麼是最好的方法?

+0

我通常會選擇前10位作者及他們的帖子,併爲每位作者挑選一位。 – apokryfos

+0

您可以通過author_id選擇帖子組,然後取第10個。 – Sovon

回答

0

一種解決方案是由柱created_at列定義的作者模型訂購一hasOne關係。

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

然後將查詢將是:

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

我這樣做:

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

當鑑於循環:

@foreach ($posts as $post) 
    {{ $post->name }} 
    {{ $post->author->name }} 
@endforeach 
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()非常慢,當你嵌套它時,如果表很大,獲取數據可能會花費太多時間。