교리 마이그레이션 외국 열쇠
-
06-07-2019 - |
문제
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');
}
}
제휴하지 않습니다 StackOverflow