mysql - 合并计数结果加入laravel

标签 mysql laravel-5 lumen-5.2

我想要获得诸如带有评论数量的新闻列表之类的内容

文章-------------评论
新闻1 ---------------- 10
新闻2 ---------------- 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();

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

最佳答案

使用 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()];
}

或者您可以在 View 中迭代:

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

我认为这种方式是规范的

关于mysql - 合并计数结果加入laravel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37482679/

相关文章:

mysql查询INSERT两张表

mysql - 如果一个表是联结表,如何通过一个查询插入两个表?

Laravel 5,使用 UUID 时无法获取刚刚保存的模型的 ID

php - 从 Controller 返回数据到 ajax laravel

mysql - 我有两个名为 created_at 和 updated_at(timestamps) 的字段,我想在我的 where 子句中的这些日期之间进行搜索

mysql - 如何选择另一个表中不存在的行

php - 插入和搜索多个关键字

php - 是否可以从 laravel 迁移中更改 mysql DB 编码字符集?

php - 命令 "make:seeder"未在 Lumen 5.2 中定义

laravel - 当使用 --tries=0 时,PHP 错误将作业推送到延迟队列中