0

コメント数付きのニュース一覧みたいなものを取得したい

記事 ------------- コメント
news1 ---------------- 10
news2 ---------------- 2
ニュース3 ---------------- 13
ニュース4 ---------------- 25

生のSQLでそれを行う方法は知っていますが、laravelでは作成できません。laravel は生のクエリを処理できますが、クエリ全体に使用したくありません。
ここに私の現在の切り取られたコードがあります:

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

selectメソッドにカウントを入れようとしましたが、エラーが発生しました(上に書かれていないようにコメントテーブルに参加しています)

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

私は参加できないので、現在は別のコードを使用してカウントし、json 応答に設定しています

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

ループごとにカウントを要求するため、数値を取得するのは良い方法ではないと思います

4

1 に答える 1

0

雄弁な関係を使用する

News.php

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

次にコントローラーで

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

または、ビューで反復できます。

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

この方法は標準的だと思います

于 2016-05-27T12:38:03.027 に答える