useAutoIncrement; } final public function getAllowedFields(): array { return $this->allowedFields; } /** * 기존 로직 유지: * - nullableFields에 지정된 필드만 '' => null 로 변환 */ protected function emptyStringToNull(array $data): array { if (!isset($data['data']) || !is_array($data['data'])) { return $data; } if (empty($this->nullableFields)) { return $data; } foreach ($this->nullableFields as $field) { if (!array_key_exists($field, $data['data'])) { continue; } $v = $data['data'][$field]; if (is_string($v)) { $v = trim($v); $data['data'][$field] = ($v === '') ? null : $v; } else { if ($v === '') { $data['data'][$field] = null; } } } return $data; } /** * ✅ 추가 로직: * INSERT 때만 DB DEFAULT를 쓰고 싶은 필드를 payload에서 제거(unset) * * - allowedDbDefaultFields에 있는 필드만 처리 * - 값이 null / '' / (옵션)공백문자열 이면 unset * - 이렇게 하면 INSERT 쿼리에서 컬럼 자체가 빠져서 DB default가 적용됨 */ protected function applyDbDefaultsOnInsert(array $data): array { if (!isset($data['data']) || !is_array($data['data'])) { return $data; } if (empty($this->allowedDbDefaultFields)) { return $data; } foreach ($this->allowedDbDefaultFields as $field) { if (!array_key_exists($field, $data['data'])) { continue; } $v = $data['data'][$field]; // null이면 제거 if ($v === null) { unset($data['data'][$field]); continue; } // 문자열이면 '' 또는 (옵션)trim 후 '' 이면 제거 if (is_string($v)) { if ($v === '') { unset($data['data'][$field]); continue; } if ($this->dbDefaultTreatWhitespaceAsEmpty && trim($v) === '') { unset($data['data'][$field]); continue; } } } return $data; } }