고도몰5 기능을 확장하다보면, 테이블을 추가해야 하는 경우가 생기는데,
\Component\Database\DBTableField.php 파일에 테이블 스키마를 구성해야 한다.
테이블 컬럼 형태에 맞춰서 $arrField 를 구성해야 하는데 이게 은근 귀찮은 작업이고,
실수하면 사이드 이펙트를 일으키고, 해당 오류를 찾기가 어렵다.
고도몰의 phpmyadmin 이 information_schema 를 참조할수 있도록 하고 있고,
테이블 스키마 정의는 infomation_schema db에 기록되어 있다.
이를 이용하여, 쿼리로 테이블에 대한 $arrField 생성하도록 해보았다.
set GROUP_CONCAT_MAX_LEN = 10000000;
select concat('$arrField = [', group_concat('\n', concat('[', T3.val, ', ', T3.typ, ',', T3.def, ', ', '], //', comment)), '\n];') as result
FROM (
SELECT CONCAT('\'val\' => \'', COLUMN_NAME, '\'') AS val,
CONCAT('\'typ\' => \'', type1, '\'') AS typ,
CONCAT('\'def\' => ', default_val) AS def,
COLUMN_COMMENT as comment
FROM (SELECT COLUMN_NAME,
type1,
(CASE
WHEN T1.COLUMN_DEFAULT IS NOT NULL AND type1 = 'i' THEN COLUMN_DEFAULT
WHEN T1.COLUMN_DEFAULT IS NOT NULL AND type1 <> 'i' THEN CONCAT('\'', COLUMN_DEFAULT, '\'')
ELSE 'null'
END) AS default_val,
COLUMN_COMMENT
FROM (SELECT
(CASE
WHEN DATA_TYPE = 'int' THEN 'i'
WHEN DATA_TYPE = 'decimal' THEN 'd'
WHEN DATA_TYPE = 'json' THEN 'j'
ELSE 's'
END
) AS type1,
COLUMN_NAME,
DATA_TYPE,
COLUMN_TYPE,
COLUMN_DEFAULT,
COLUMN_COMMENT
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'ex_goods_auction') T1
) T2
) T3
;
주의할점은 group_concat 사이즈가 작은 경우에 결과가 잘려질수 있으니, 반드시 group_concat_max_len 을 변경하고 실행.
FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'es_goods'
WHERE 조건절에 추가로 생성한 테이블명을 입력합니다. (es_goods 테이블을 테스트 해보았습니다.)
쿼리 실행 결과를 php 코드에 복붙하면 아래와 같이 출력되는걸 확인할수 있습니다.
'PHP > 고도몰' 카테고리의 다른 글
고도몰5 Pro DBTableField 자동 생성 - ChatGPT (0) | 2023.04.09 |
---|---|
고도몰5 에서 상품별로 배송비를 별도 책정하는 방법 (0) | 2023.04.06 |
고도몰5 사용자 상품 등록 기능 개발시 주의점 (0) | 2023.03.14 |
고도몰5 에서 쿼리 로그 디버깅 (1) | 2023.01.11 |
고도몰5Pro 카카오톡 공유(kakao) 오류 ErrorCode(4002) (0) | 2022.08.02 |