validate(self::getValidateArray($data_path)); } private static function getValidateArray(string $data_path = null) { $rules = [ self::COL_NAME_SEASON_TICKET_SEQ_NO => 'required|numeric', self::COL_NAME_IDM => 'nullable|string', self::COL_NAME_VEHICLE_TYPE => 'required|numeric', self::COL_NAME_CONTRACTOR_TYPE_LINE_NO => 'required|numeric', self::COL_NAME_EXPIRATION_START_DATE => 'nullable|string', self::COL_NAME_EXPIRATION_END_DATE => 'nullable|string', self::COL_NAME_NORMAL_PERIOD_ADJUST_DIVISION_START_LINE_NO => 'required|numeric', self::COL_NAME_NORMAL_PERIOD_ADJUST_DIVISION_END_LINE_NO => 'required|numeric', self::COL_NAME_STARTED_PERIOD_ADJUST_DIVISION_LINE_NO => 'required|numeric', self::COL_NAME_OUT_OF_TERM_PERIOD_ADJUST_DIVISION_LINE_NO => 'required|numeric', self::COL_NAME_INVALID_FLG => 'required|numeric', self::COL_NAME_UPDATE_DATEMTIME => 'required|string', ]; $result = []; foreach ($rules as $key => $val) { if ($data_path !== null) { $result[$data_path . '.*.' . $key] = $val; } else { $result[$key] = $val; } } return $result; } public static function createFromArray(array $data, bool $snakecase = false): self { $ele = new SeasonTicketContract(); $func = function (&$target, string $col) use ($data, $snakecase) { if ($snakecase) { $key = Str::snake($col); if (isset($data[$key])) { $val = $data[$key]; if ($val instanceof VehicleTypeCode) { $target = $val->value; } else if ($val === null) { $target = ""; } else { $target = $val; } } } else { $target = $data[$col] ?? ""; } }; $func($ele->seasonTicketSeqNo, self::COL_NAME_SEASON_TICKET_SEQ_NO); $func($ele->idm, self::COL_NAME_IDM); $func($ele->vehicleType, self::COL_NAME_VEHICLE_TYPE); $func($ele->contractorTypeLineNo, self::COL_NAME_CONTRACTOR_TYPE_LINE_NO); $func($ele->expirationStartDate, self::COL_NAME_EXPIRATION_START_DATE); $func($ele->expirationEndDate, self::COL_NAME_EXPIRATION_END_DATE); $func($ele->normalPeriodAdjustDivisionStartLineNo, self::COL_NAME_NORMAL_PERIOD_ADJUST_DIVISION_START_LINE_NO); $func($ele->normalPeriodAdjustDivisionEndLineNo, self::COL_NAME_NORMAL_PERIOD_ADJUST_DIVISION_END_LINE_NO); $func($ele->startedPeriodAdjustDivisionLineNo, self::COL_NAME_STARTED_PERIOD_ADJUST_DIVISION_LINE_NO); $func($ele->outOfTermPeriodAdjustDivisionLineNo, self::COL_NAME_OUT_OF_TERM_PERIOD_ADJUST_DIVISION_LINE_NO); $func($ele->invalidFlg, self::COL_NAME_INVALID_FLG); $func($ele->updateDatemtime, self::COL_NAME_UPDATE_DATEMTIME); return $ele; } public static function createFromModel(ModelsSeasonTicketContract $model): self { $ele = new SeasonTicketContract(); $ele->seasonTicketSeqNo = $model->season_ticket_seq_no; $ele->idm = $model->idm; $ele->vehicleType = $model->vehicle_type->value; $ele->contractorTypeLineNo = $model->contractor_type_line_no; $ele->expirationStartDate = is_null($model->expiration_start_date) ? "" : $model->expiration_start_date->format('Ymd'); $ele->expirationEndDate = is_null($model->expiration_end_date) ? "" : $model->expiration_end_date->format('Ymd'); $ele->normalPeriodAdjustDivisionStartLineNo = $model->normal_period_adjust_division_start_line_no; $ele->normalPeriodAdjustDivisionEndLineNo = $model->normal_period_adjust_division_end_line_no; $ele->startedPeriodAdjustDivisionLineNo = $model->started_period_adjust_division_line_no; $ele->outOfTermPeriodAdjustDivisionLineNo = $model->out_of_term_period_adjust_division_line_no; $ele->invalidFlg = $model->invalid_flg; $ele->updateDatemtime = $model->update_datemtime->format('YmdHisv'); return $ele; } public function toArray(): array { $data = []; $data[self::COL_NAME_SEASON_TICKET_SEQ_NO] = $this->seasonTicketSeqNo; $data[self::COL_NAME_IDM] = $this->idm; $data[self::COL_NAME_VEHICLE_TYPE] = $this->vehicleType; $data[self::COL_NAME_CONTRACTOR_TYPE_LINE_NO] = $this->contractorTypeLineNo; $data[self::COL_NAME_EXPIRATION_START_DATE] = $this->expirationStartDate; $data[self::COL_NAME_EXPIRATION_END_DATE] = $this->expirationEndDate; $data[self::COL_NAME_NORMAL_PERIOD_ADJUST_DIVISION_START_LINE_NO] = $this->normalPeriodAdjustDivisionStartLineNo; $data[self::COL_NAME_NORMAL_PERIOD_ADJUST_DIVISION_END_LINE_NO] = $this->normalPeriodAdjustDivisionEndLineNo; $data[self::COL_NAME_STARTED_PERIOD_ADJUST_DIVISION_LINE_NO] = $this->startedPeriodAdjustDivisionLineNo; $data[self::COL_NAME_OUT_OF_TERM_PERIOD_ADJUST_DIVISION_LINE_NO] = $this->outOfTermPeriodAdjustDivisionLineNo; $data[self::COL_NAME_INVALID_FLG] = $this->invalidFlg; $data[self::COL_NAME_UPDATE_DATEMTIME] = $this->updateDatemtime; return $data; } /** * モデルへデータをセットする */ public function fillToModel(ModelsSeasonTicketContract $model): void { if ($this->expirationStartDate !== "") { $expirationStartDate = Carbon::createFromFormat('Ymd', $this->expirationStartDate); if (!$expirationStartDate->isValid()) throw new Exception('日付不正'); $model->expiration_start_date = $expirationStartDate; } else { $model->expiration_start_date = null; } if ($this->expirationEndDate !== "") { $expirationEndDate = Carbon::createFromFormat('Ymd', $this->expirationEndDate); if (!$expirationEndDate->isValid()) throw new Exception('日付不正'); $model->expiration_end_date = $expirationEndDate; } else { $model->expiration_end_date = null; } $updateDatemtime = Carbon::createFromFormat('YmdHisv', $this->updateDatemtime); if (!$updateDatemtime->isValid()) throw new Exception('日付不正'); $model->update_datemtime = $updateDatemtime; $model->vehicle_type = VehicleTypeCode::from($this->vehicleType); $model->idm = $this->idm; } }