2017-06-17 3 views
0

Sie müssen die folgende Funktion (auf Facebook), ein Beitrag mit einigen Kommentaren, jeder Kommentar hat einen ähnlichen Zähler.Eloquent Count verschachtelte Beziehungen mit verschachtelten Eager laden

https://img4.hostingpics.net/pics/67853820170616003640LaravelNewsAccueil.png

In Laravel würde es so etwas wie

  • Beitrag hasMany Kommentar
  • Kommentar belongsTo Beitrag
  • CommentLike belongsTo Benutzer
  • CommentLike belongsTo Kommentar
  • Kommentar hasMany CommentLike sein

so jetzt, ich will mit ihren Kommentaren 10 Beiträge bekommen, mit dem wie Zähler pro Kommentar

Beitrag :: mit ('Kommentaren') -> withCount ('comments.likes') -> nehmen (10) -> erhalten();

Dies überhaupt nicht funktioniert ...

Beitrag :: mit ('Kommentare') -> withCount ('Kommentare') -> Take (10) -> get();

Dies tut, aber dies zählt alle Kommentare für jeden Beitrag, ich möchte alle Likes per Kommentar zu jedem Beitrag zählen.

Antwort

0

Versuchen Sie, diese

Post::with('comments' => function($query){ 
    $query->withCount('comments.likes') 
}])->take(10)->get(); 
+0

dies scheint nicht ein comment_likes Tabelle stellt – darkylmnx

0

Ich mache eine Annahme CommentLike

Post::with('comments' => function($query){ 
    $query->select('comment_likes.*') 
      ->join('comments', 'comments.id', '=', 'comment_likes.comment_id') 
      ->groupBy('comments.id')  
      ->havingRaw('sum(comment_likes.id) as likes') 
}])->take(10)->get(); 
+0

schön zu arbeiten ich dies versuchen werden! Aber gibt es dafür keinen "eloquenten" Weg? ohne rohe Abfrage? – darkylmnx

+0

Nicht in meinem Wissen mit der Summe (...) Funktion. – btl