2017-10-08 3 views
0

Gibt es eine Möglichkeit, Beiträge von verschiedenen Autoren auf jeder Seite aufzulisten.Laravel Eloquent: Wie kann man Beiträge von verschiedenen Autoren auf einer Seite auflisten?

Beispiel: Sie haben gewählt, 10 Beiträge pro Seite aufzulisten, und diese 10 Beiträge sollten von verschiedenen Autoren stammen.

Der Laravel Elequent sollte verwendet werden. Was ist der beste Weg?

+0

Ich würde normalerweise die ersten 10 Autoren mit ihren Beiträgen auswählen und einen pro Autor auswählen. – apokryfos

+0

Sie können die Beitragsgruppe nach author_id auswählen und die ersten 10 nehmen. – Sovon

Antwort

0

Eine Lösung ist durch die Beiträge created_at Spalte eine hasOne Beziehung auf den Autor Modell Ordnung zu definieren.

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

dann Ihre Abfrage wäre:

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

Ich würde dies tun:

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

Wenn im Hinblick auf Looping:

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

Liste 10 Beiträge pro Seite, und diese 10 Beiträge von verschiedenen Autoren sein sollte

Post::inRandomOrder()->groupBy('user_id')->take(10)->get(); 

ich getestet habe es und es wird dir geben, was du willst. Es wird jedoch immer den gleichen Beitrag für jeden Autor geben. Autoren werden also immer zufällig sein, aber der Beitrag jedes Autors wird immer derselbe sein.

Eine andere Lösung ist hasOne Beziehung zu verwenden:

public function singlePost() { 
    return $this->hasOne(Post::class); 
} 

Und dann:

Author::inRandomOrder()->with('singlePost')->take(10)->get(); 

Wenn Sie eine zufällige Post für 10 zufällige Autoren erhalten möchten, erstellen Sie eine andere Beziehung:

public function randomPost() { 
    return $this->hasOne(Post::class)->inRandomOrder(); 
} 

Und dann:

Seien Sie vorsichtig, denn inRandomOrder() ist ziemlich langsam und wenn Sie es verschachteln, kann es zu viel Zeit dauern, um die Daten zu bekommen, wenn Tabellen groß sind.

Verwandte Themen