结合计数结果加入laravel

时间:2016-05-27 11:44:13

标签: mysql laravel-5 lumen-5.2

我希望得到类似评论数量的新闻列表

文章-------------评论
news1 ---------------- 10
news2 ---------------- 2
news3 ---------------- 13
news4 ---------------- 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 response

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

我认为这不是获取数字的好方法,因为它会为每个循环请求计数

1 个答案:

答案 0 :(得分:0)

使用Eloquent relations

<强> News.php

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

然后在Controller

$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

我认为这种方式是规范的