차량 이력 조회를 위해 rent 테이블과 새로 생성한 status_log 테이블을 union함
결과 조회를 위해 쿼리문이 조금 길어졌는데
// 차량 이력 공통쿼리
function carStatusLogQuery($vin_number, $code){
$query = DB::table('mn_rent')
->where('car_vin_number', $vin_number)
->where('rent_status', $code)
->selectRaw('ID,
car_number,
car_vin_number,
"시스템 변경" as reason,
"system" as admin_id');
return $query;
}
public function getCarStatusLog($vin_number){
// 구독(운행중) 차량이력
$rentQuery = $this->carStatusLogQuery($vin_number, '02')
->addSelect('rent_start as regist_date', 'rent_status as car_status');
// 구독완료(구독) 차량이력
$rentEndAttQuery = $this->carStatusLogQuery($vin_number, '03')
->addSelect('rent_start as regist_date', 'rent_status as car_status');
// 구독완료(대기중) 차량이력
$rentEndQuery = $this->carStatusLogQuery($vin_number, '03')
->addSelect(DB::raw(
'if( rent_end>rent_change_cancel_date, rent_end, ifnull(rent_change_cancel_date, rent_end) ) as regist_date,
if( true, "01", "")
'));
// rent_status 상태값& car_status 값 조율 필요
// 예약상태는 차량 구독/변경시 log에 저장
// 결제완료&렌트종료 상태만 받아와서 계산해야 할 것 같음
// 03 = 렌트종료.. 필요?
$resultQuery = DB::table('mn_log_car_status')
->select('*')
->where('car_vin_number', $vin_number)
->unionAll($rentQuery)
->unionAll($rentEndAttQuery)
->unionAll($rentEndQuery);
if($resultQuery->count()==0)
return false;
else
return $resultQuery->get();
}
구독완료 상태에서 구독중, 대기중 차량이력 구분이 좀 번거로웠다.
아직 테스트중, 더 나은 방안이 있으면 수정보완 하기로
+) 유니온은 칼럼 명을 지정해도 순서가 정해져있어서 칼럼 순서가 바뀔 경우 데이터도 유니온을 실행하는 테이블 기준으로 들어가서 매우 몹시 번거롭다. 배고프다
'Server > PHP' 카테고리의 다른 글
[Laravel][Error] SQLSTATE[HY000] [1045] Access denied for user (0) | 2019.07.09 |
---|---|
[laravel] 아마존ses 드라이버로 메일 발송 (0) | 2019.06.14 |
[laravel_lumen] database GroupBy [Syntax error or access violation] (0) | 2019.06.13 |
[php] Carbon & Date (0) | 2019.06.07 |
[laravel] amazon aws ses 메일 설정 및 사용방법 (0) | 2019.05.21 |