Laravel 날짜 데이터에서 연도를 가져와 그룹에 넣기

9360 단어 PHPLaravelCollection

해봤어요.

date 열에서 연도로 변환하고 중복 항목을 삭제하고 정렬 값을 내립니다.
date 열에 존재하는 연도만 획득할 수 있습니다.
일반적인 연도(4월 1일~이듬해 3월 31일을 연도로 한다).
※ 2019년의 경우 2019년 4월 1일부터 2020년 3월 31일까지
StatusContoller.php
$dates = Status::pluck('date');
foreach ($dates as $date) {
  $array[] = $date->subMonthsNoOverflow(3)->format('Y');
}
$years = collect($array)->unique()->sort()->reverse()->values();

dd($years);

sort () 정보


처음엔 ->values()->sortByDesc('date'); 할 수 있을까 생각했는데...dd($years);의 결과

↑ 요구하는 순서가 없습니다!일본어 문서를 보고 반복해서 시도했는데 항복했어요!!!
@mpyw선생님께서 상의하시고 알려주셨어요.
값을 내림차순으로 표시합니다(연간)!->sort()->reverse()->values();・pluck할 때 안에 있는 걸 꺼냈어요.
・sortBy는 2차원 그룹이라고 가정하지만 이미 1차원 그룹이다
・ 원본 PHP의 경우sort 함수에 대응하여 rsort 함수가 있을 수 있음
・collection 역순으로 정렬하는 방법이 없으므로 정렬 후 수조를 반대로 정렬합니다
이런 일.
이렇게 하면 구한 값(연간)을 정렬할 수 있습니다!👏

참고로 어쨌든 sortByDesc 를 사용하려면 플러그 전에 사용할 수 있습니다sortByDesc('date')->pluck('date')메모리를 소모해야 하기 때문에 추천하지 않습니다!

맵() 사용 방법


댓글보다 키요미 씨가 알려줬어요.
StatusContoller.php

$years = Status::pluck('date')->map(function ($date) {
     return $date->subMonthsNoOverflow(3)->format('Y');
})->unique()->sort()->reverse()->values();

dd($years);

검색 생성기 사용 방법


kiyoami씨가 알려줬어요.누차 감사합니다!
이것은 연도가 아니라 년(2020년)이다.➡2020년 1월 1일~2020년 12월 31일).
StatusContoller.php

$years = Status::selectRaw('year(`date`) `yyyy`')->distinct()->groupBy('date')->pluck('yyyy');

dd($years);

드롭다운 목록에 연도 표시하기


index.blade.php
    <select name="year">
        @foreach($years as $key => $name)
        <option value="{{ $name }}"{{old('year', $year) == $name ? 'selected' : ''}}>{{ $name }}</option>
        @endforeach
    </select>
당분간 이걸로 연도를 배열하여 표시하고 완성한다.

다음은 연간 데이터 취득 시


예를 들어 연도가 축소될 때가 있다.
상태표의 date 열에서 (선택 사항) 년 4월 1일부터 이듬해 3월 31일까지 데이터를 가져옵니다.
StatusContoller.php

$year = $request->input('year');
$status = Status::query();

if (!empty($year)) {
     $startAt = CarbonImmutable::createMidnightDate($year, 4, 1);
     $endAt = $startDate->day(1)->addMonths(11)->endOfMonth();
     $status->whereBetween('date', [$startAt, $endAt]);
 }
$year에 가입2015했을 때$startAt$endAt는 다음과 같다.dd($startAt); dd($endAt);

참고 문헌


이 글은 아래의 정보를 참고하였다.
  • 연도 함수 가져오기
  • 전체 217건!Carbon에서 시간 작업을 수행하는 인스턴스
  • 좋은 웹페이지 즐겨찾기