Внешние ключи миграции доктрины
-
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 для создания миграций из существующей схемы, Doctrine сгенерирует отдельную миграцию для создания каждой таблицы, а затем сгенерирует окончательную единую миграцию, которая устанавливает все отношения внешнего ключа.
Я бы попробовал перенести создание внешнего ключа в отдельную миграцию и посмотреть, сработает ли это.
вам нужно добавить индекс 'foreign_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');
}
}