php - 生成数据库 MyISAM Doctrine 2

标签 php mysql doctrine-orm innodb myisam

我正在使用 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/

相关文章:

php - 为什么在匿名函数上使用 `eval` 时,使用 `unset` 之后不会释放内存?

php - Azure 网站 PHP 5.6 IIS 8.0 setlocale 函数问题

c# - 有没有办法返回创建的记录而无需再次查询数据库?

php - 如何在 codeigniter 中创建用户时创建空行

mysql - mysql 是如何工作的?

php - json编码的php数组在javascript中返回未定义

PHP服务器端帖子

symfony - Doctrine2 - 使用 ORM QueryBuilder 连接没有关联的实体

php - Doctrine QueryBuilder 和 concat 问题

database - Doctrine Query Builder 不适用于 UPDATE 和 INNER JOIN