//===============
* 조인(join, leftJoin) 사용시 주의할 점
    - 주의!! 다른 테이블에 같은 이름의 칼럼이 있는 경우, 값이 덮어 써진다.

Test1::from('test1 as t1')
    //->select( 't1.*' , 't2.name') //위험! t1에도 name 칼럼이 있으면 t2.name으로 덮어써짐
    ->select( 't1.*' , 't2.name AS t2_name') // AS 로 별칭 지정 필요
    ->leftJoin('test2 as t2', 't1.t1_no' ,'=', 't2.t1_no')               
    ->get();





//================
* 다른 칼럼과 count() 함수 함께 사용시
    - group by 문이 필요하다

Test1::from('test1 as t1')
    ->select( 't1.*', 't2.t1_no as t2_t1_no',  \DB::raw('count(t2.t1_no) as total'))
    //->selectRaw( 't1.*, t2.t1_no as t2_t1_no, count(t2.t2_no) as t2_cnt')
    ->leftJoin('test2 as t2', 't1.t1_no' ,'=', 't2.t1_no')
    ->groupBy( 't1_no' ) // count() 사용시 필요
    ->get(); 




//================
* 외래키
    - 외래키 설정시 두 칼럼의 형식이 완전히 동일한지 확인한다. unsigned 까지도

    - 추가
//ALTER TABLE test2 ADD FOREIGN KEY (t1_no) REFERENCES test1(t1_no); //간단
//ALTER TABLE test2 ADD CONSTRAINT fk_t2_t1_1 FOREIGN KEY (t1_no) REFERENCES test1(t1_no);//키 이름 지정
ALTER TABLE test2 ADD CONSTRAINT fk_t2_t1_1 FOREIGN KEY (t1_no) REFERENCES test1(t1_no) ON DELETE RESTRICT ON UPDATE RESTRICT;//기능 지정

    //=========
    - 강제 추가 (데이터 무결성 검사 하지 않음)
        - 다음의 에러 발생시 : 1452 - Cannot add or update a child row: a foreign key constraint fails `#sql-1ea8_f7`
            - 두 테이블간 데이터에 결함이 있어서 외부키를 생성할수 없을때 에러 메시지

        - 다음 명령으로 추가는 되지만 On Delete 와 On Update 가 NO ACTION 으로 설정됨

SET FOREIGN_KEY_CHECKS = 0;//체크 끄기
외래키 추가 명령
SET FOREIGN_KEY_CHECKS = 1;//체크 켜기
       


    - 삭제
ALTER TABLE test2 DROP FOREIGN KEY fk_t2_t1_1;

'Code > PHP' 카테고리의 다른 글

[html, php] 이스케이프( Escape)  (0) 2019.02.12
PHP 버전 역사  (0) 2019.02.11
[라라벨] DB 사용팁 (주의할점)  (0) 2019.02.07
[라라벨] 다국어 지원  (0) 2019.02.01
[php] PEAR , PECL , composer  (0) 2019.01.31
[라라벨] 레디스 (Redis)  (0) 2019.01.31
Posted by 코덴스

댓글을 달아 주세요