合并计数结果以加入 laravel
Combine count result to join in laravel
我想得到类似新闻列表和评论数的东西
文章------------评论
新闻1 -------------- 10
新闻2 -------------- 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 方法但出现错误(加入评论 table 上面没有写)
->select('news.id', 'count(mscomment.id) as commented', ...)
因为我不能加入,目前我使用单独的代码来统计它并将其设置为json响应
$commented = Comment::where('news_id', $news->id)->count();
我认为这不是获取数字的好方法,因为它会为每个循环请求计数
使用Eloquentrelations
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
我认为这种方式是规范的
我想得到类似新闻列表和评论数的东西
文章------------评论
新闻1 -------------- 10
新闻2 -------------- 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 方法但出现错误(加入评论 table 上面没有写)
->select('news.id', 'count(mscomment.id) as commented', ...)
因为我不能加入,目前我使用单独的代码来统计它并将其设置为json响应
$commented = Comment::where('news_id', $news->id)->count();
我认为这不是获取数字的好方法,因为它会为每个循环请求计数
使用Eloquentrelations
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
我认为这种方式是规范的