我正在使用 Doctrine 根据我的实体生成和更新我的数据库。此外,我在我的表上使用 MyISAM 引擎。为此,我添加了注释,例如:
/** (...) @ORM\Table(name="user",options={"engine":"MyISAM", "charset"="utf8"}) */
这些表通常是作为 MyISAM 生成的,但是当我尝试更新它们时,现在学说正在尝试生成 FK。然后我得到:
General error: 1215 Cannot add foreign key constraint
我知道MyISAM不支持FK,有没有办法告诉学说跳过FK的创建?
I am using both orm:schema-tools:update (in DEV) and migrations (in PROD). Also I am using zf2.
最佳答案
基于this thread我带来了一个解决方案。
我向 EM 添加了一个事件监听器。
$em->getEventManager()->addEventSubscriber(new DropForeignKeysListener());
此事件将从注释生成的架构中删除所有 FK,如下所示:
use Doctrine\Common\EventSubscriber;
use Doctrine\ORM\Tools\ToolEvents;
use Doctrine\ORM\Tools\Event\GenerateSchemaEventArgs;
class DropForeignKeysListener implements EventSubscriber
{
public function postGenerateSchema(GenerateSchemaEventArgs $args) {
$schema = $args->getSchema();
$table_names = $schema->getTableNames();
foreach ($table_names as $table_name) {
$table = $schema->getTable($table_name);
$fks = $table->getForeignKeys();
foreach ($fks as $fk => $obj) {
$table->removeForeignKey($fk);
}
}
}
public function getSubscribedEvents() {
return array(ToolEvents::postGenerateSchema);
}
}
关于php - 生成数据库 MyISAM Doctrine 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32940077/