LoginSignup
0
0

More than 1 year has passed since last update.

【Laravelクエリビルダ】1時間ごとにgroupByして集計する方法

Last updated at Posted at 2021-07-11

laravelで1時間ごとにグループ化させて集計する方法を簡単に解説します。

バージョンは6系です。

ブログで以下のような記事も書いています。

ゴール

時間 合計
12:00〜12:59 200
15:00〜15:59 300
19:00〜19:59 500

準備

postsテーブル

post_id amount created_at
1 100 2021-06-01 12:23:07
2 200 2021-06-15 15:23:23
3 300 2021-06-30 16:21:12
4 400 2021-07-21 19:23:32
5 200 2021-07-27 15:04:56

ここから、created_atの時間でグループ化させて合計値を出します。

 考え方

HOUR関数を使用することで、時刻から時を取り出すことができます。

サンプルコード

モデル(Post.php)

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;←忘れず記載する

class Post extends Model
{
    public function getAmountByHour()
    {
      return DB::table('posts')
              ->selectRaw('HOUR(created_at) AS time')
              ->selectRaw('SUM(amount) as total_amt')
              ->groupBy('time')
              ->get();
    }
}

selectRawはselect(DB::raw)の短縮系です。HOUR関数で2021-06-08 12:34:55
の12時を取り出すことができます。

あとは時間でグループ化させれば集計できます。

コントローラー(PostController.php)

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Post;←バージョン8系なら use App\Models\Post;

class PostController extends Controller
{
    public function index()
    {
        $this->posts = new Post();

        $results = $this->posts->getAmountByHour();

        return view('posts.index', compact(
            'results',
        ));
    }
}

ビュー(index.blade.php)

<table>
    <thead>
      <tr>
        <th>日付</th>
        <th>合計</th>
      </tr>
    </thead>
    <tbody>
    @foreach ($results as $result)
      <tr>
        <td>{{ $result->time }}:00〜{{ $result->time }}:59</td>
        <td>{{ $result->total_amt }}</td>
      </tr>
    @endforeach
    </tbody>
</table>

$resultsにはモデルで取得したデータがコレクション型で格納されています。なので、foreachで取り出しましょう。

以下のようにデータが取得できました。

スクリーンショット 2021-07-11 18.21.41.png

今回は、時間でグループ化させる方法を見てきました。

このほかにも私の記事でlaravelのクエリビルダを解説しているので、ぜひ他の記事も見てくださいね!

記事が参考になったら、ストックかLGTMをお願いいたします。

ブログで以下のような記事も書いています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0