Laravel groupBy

时间:2014-08-30 09:14:19

标签: php laravel laravel-4 group-by

我试图重新设计我的Laravel 4.2代码,并希望在过去几天对结果中的列表进行分组。

代码:

public function getTrending($type = null, $category = null)
{
    $posts = $this->posts($type, $category)->with('comments', 'votes', 'category', 'user', 'votes.user')
        ->leftJoin('votes', 'posts.id', '=', 'votes.post_id')
        ->leftJoin('comments', 'posts.id', '=', 'comments.post_id')
        ->select('posts.*', DB::raw('count(comments.post_id)*7 + count(votes.post_id)*30 + posts.views as popular'))
        ->groupBy('posts.id')->with('user')->orderBy('popular', 'desc')->whereMonth('posts.created_at', '>=', date('n', strtotime('-1 month')))
        ->paginate(perPage());

    return $posts;
}

我想按原样对结果进行分组(相关性:评论,投票,访问)+在每日基础上对结果进行分组。

像:

今天(使用日期xx.xx.xx)

  • 结果1(最大投票,评论,......)
  • 结果2
  • 结果3

昨天(日期为xx.xx.xx)

  • 结果4(Max Votes,Comments,...)
  • 结果5
  • 结果6

这可能吗?

2 个答案:

答案 0 :(得分:0)

你可以使用Carbon;

->groupBy(function($date) {
        return Carbon::parse($date->created_at)->format('Y'); // grouping by years
        //return Carbon::parse($date->created_at)->format('m'); // grouping by months
    });

答案 1 :(得分:-1)

不,我不相信您可以将数据分组到这样的单个查询中。

假设您的代码为您提供了所需的数据集,而没有按日期分组,我会遍历我想要的日期并获取每天的数据并将其格式化为日期标题等。