2017-03-09 2 views
0

Ich habe eine One to Many-Beziehung eingerichtet für meine "Ankündigungen" mit vielen "Kommentare".Laravel Pass Kommentare mit Beiträge

Zur Zeit, als meine Benutzer Lasten bis die App-Seite, ich habe es die 30 jüngsten Ankündigungen wie solche senden:

Route::get('/app', function() { 
    $posts =  Announcement::take(30)->orderBy('id', 'desc')->get(); 
    return View::make('app')->with([ 
     //posts 
     'posts'  => $posts, 
     //orders 
     'orders'  => $orders 
    ]); 
} 

Wenn ich die Ansagen in Klingen Echo aus einer foreach-Schleife durch den $ posts mit Objekt, möchte ich auch die Kommentare für jeden Beitrag unter dem jeweiligen Beitrag aussprechen.

Ist es möglich, die Kommentare für einen Beitrag als Teil des eigentlichen Postobjekts zu übergeben? Zum Beispiel wäre es schön, wenn ich dies tun könnte:

@foreach ($posts as $post) 
    //echo out the post 
    {{$post->content}} 
    //echo out the comments relating to this post 
    {{$post->comments}} 
@endforeach 

Antwort

1

@Amr Aly hat Ihnen die richtige Antwort, und ich würde mag darüber hinaus hinzufügen.

Wenn Sie Ihre Kommentare durchlaufen, wie er Ihnen gezeigt hat (und Sie sollten), wird für jeden Kommentar eine andere Abfrage erstellt. SO wenn Sie 50 Kommentare haben, sind das 50 weitere Abfragen.

Sie können die Milderung von eifrigen Laden mit

$posts = Announcement::with('comments') 
->take(30)->orderBy('id', 'desc') 
->get(); 

Dann einfach Schleife der Art, wie er Sie zeigte. Dadurch werden die Abfragen nur auf 2 beschränkt. Sie können mehr aus der Dokumentation hier lesen: https://laravel.com/docs/5.4/eloquent-relationships#eager-loading

1

Sie eine andere foreach für Ihren Kommentar wie folgt hinzufügen:

@foreach ($posts as $post) 
     //echo out the post 

     @if($post->comments->count()) 
      @foreach ($post->comments as $comment) 
      // {{ $comment }} 
      @endforeach 
     @endif 

@endforeach 
Verwandte Themen