【Laravel 쿼리 빌더】1시간마다 groupBy하여 집계하는 방법
버전은 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:5512시를 꺼낼 수 있습니다.
그리고는 시간에 그룹화시키면 집계할 수 있습니다.
컨트롤러 (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로 꺼내 봅시다.
다음과 같이 데이터를 얻을 수 있습니다.
이번에는 시간에 그룹화하는 방법을 보았습니다.
이 외에도 내 기사에서 laravel의 쿼리 빌더를 해설하고 있으므로, 꼭 다른 기사도 봐주세요!
기사가 도움이 되면 스톡이나 LGTM을 부탁드립니다.
블로그에서 다음과 같은 기사도 쓰고 있습니다.
Reference
이 문제에 관하여(【Laravel 쿼리 빌더】1시간마다 groupBy하여 집계하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kamome_susume/items/e99679a06a94aff08719텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)