2016-05-27 6 views
0

erhalte ich so etwas wie die Liste von Nachrichten mit der Anzahl der KommentarZählergebnis Kombinieren in Laravel

Artikel beitreten möchten ------------- Kommentar
news1 ------ ---------- 10
news2 ---------------- 2
news3 ---------------- 13
news4 ---------------- 25

Ich weiß, wie man es mit rohen SQL macht, aber kann es nicht mit Laravel machen. laravel kann rohe Abfragen verarbeiten, aber ich möchte sie nicht für die gesamte Abfrage verwenden.
hier ist mein aktueller snipped Code:

$newslist = News::where('status_id', 2)->orderBy('id', 'desc')->skip(0)->take($itemPerLoad) 
     ->join('msuser', 'msuser.id', '=', 'news.user_id') 
     ->select(....)->get(); 

i setzte Anzahl bei der Auswahl der Methode versucht habe, bekam aber Fehler (mit Kommentaren Join-Tabelle nicht oben geschrieben)

->select('news.id', 'count(mscomment.id) as commented', ...) 

, weil ich nicht beitreten es, verwende ich zur Zeit separaten Code, um es zu zählen, und setzen sie ihn auf json Antwort

$commented = Comment::where('news_id', $news->id)->count(); 

ich denke, es ist nicht gut Weg, um die Zahl zu erhalten, weil es wieder Quest Zählung für jede Schleife

+0

Haben Sie versucht mit ** selectRaw ** wie folgt: '-> selectRaw ('news.id', 'count (mscomment.id) wie kommentiert', ...) '. – TheFallen

+0

es gibt mir diesen Fehler: Argument 2 an Illuminate \ Database \ Query \ Builder übergeben :: selectRaw() muss vom Typ array sein, String gegeben –

+1

Sorry, das ist mein Fehler. Übergeben Sie alle Spalten in einer einzigen Zeichenfolge: '-> selectRaw ('news.id, count (mscomment.id) als Kommentar')' '. – TheFallen

Antwort

0

Verwenden Eloquent relations

news.php

public function comments() 
{ 
    return $this->hasMany('NAMESPACE_TO_YOUR_MODEL\Comment'); 
} 

Dann in Controller-

$news = News::with('comments')->get(); 
$summary = []; 
foreach($news as $n) 
{ 
    $summary[] = ['article' =>$n->article, 'comments' => $n->comments->count()]; 
} 

oder Sie können im Hinblick iterieren:

@foreach($news as $n) 
    <tr> 
     <td> {{ $n->article }} </td> 
     <td> {{ $n->>comments->count() }} </td> 
    </tr> 
@endforeach 

Ich denke, so kanonisch

+0

das funktioniert gut wie nötig. mache mich auch über das eloquente Beziehungsmerkmal aufmerksam. Danke –