문제

PHP Doctrine에서 테이블을 생성하고 해당 테이블에 외국 키를 생성하는 하나의 마이그레이션 클래스를 만들 수 있습니까? 어떤 이유로, 나는 외국 열쇠를 일할 수 없다 ...

class Migration_001 extends Doctrine_Migration_Base {
    public function up() {
        $this->createTable('table_name', array(...))
        $this->createForeignKey('table_name', 'foreign_key_name', array(...))
    }

    public function down() {
        $this->dropForeignKey('table_name', 'foreign_key_name')
        $this->dropTable('table_name')
    }
}

감사합니다

도움이 되었습니까?

해결책 3

내 질문에 대답하기 위해 대답은 예입니다.

그러나 모든 것이 순서대로 정리되어 있는지 확인해야합니다. 즉, 열이 동일해야하며 (유형, 길이 등) 외국 키는 자신의 테이블에서 고유 한 키입니다 (기억하지는 않지만 아마도 기억하지는 못할 수도 있습니다. 또한 첫 번째 열이어야합니다).

다른 팁

이것은 결정적인 답이 아닐 수도 있지만 CLI를 사용하여 기존 스키마에서 마이그레이션을 만들면 교리가 별도의 마이그레이션을 생성하여 각 테이블을 생성 한 다음 모든 외국을 설정하는 최종 단일 마이그레이션을 생성합니다. 주요 관계.

나는 외국 키 창작물을 별도의 마이그레이션으로 옮기고 그것이 작동하는지 확인하려고합니다.

외국 키 제약 조건을 추가하기 전에 '외국_key_name'색인을 추가해야합니다. 그래서:

class Migration_001 extends Doctrine_Migration_Base {

    public function up() {

        $this->createTable('table_name', array(...));
        $this->addIndex('table_name', 'foreign_key_name', array(
             'fields'=>array('local_id')
        ));
        $this->createForeignKey('table_name', 'foreign_key_name', array(
             'local' => 'local_id',
             'foreign' => 'id',
             'foreignTable' => 'foreign_table',
             'onDelete'=>'CASCADE'
        ));
    }

    public function down() {
        $this->dropForeignKey('table_name', 'foreign_key_name');
        $this->removeIndex('table_name', 'foreign_key_name');
        $this->dropTable('table_name');
    }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top