Symfony 为什么条令迁移使用SQL语句,而不是让实体管理器来处理它?

Symfony 为什么条令迁移使用SQL语句,而不是让实体管理器来处理它?,symfony,doctrine-orm,doctrine-migrations,Symfony,Doctrine Orm,Doctrine Migrations,我目前正在为symfony项目设置条令迁移。 我想知道为什么自动生成的迁移使用直接SQL语句。 例如,这些限制仅限于mysql和INNODB enginge(因为它是我的本地环境)。但是它将运行在的数据库环境可能不同 为什么它不让实体经理处理这类事情 例如,在up函数中,它将生成如下内容: $this->addSql('CREATE TABLE tag (id INT AUTO_INCREMENT NOT NULL, category_id INT DEFAULT NULL, name V

我目前正在为symfony项目设置条令迁移。 我想知道为什么自动生成的迁移使用直接SQL语句。 例如,这些限制仅限于mysql和INNODB enginge(因为它是我的本地环境)。但是它将运行在的数据库环境可能不同

为什么它不让实体经理处理这类事情

例如,在up函数中,它将生成如下内容:

$this->addSql('CREATE TABLE tag (id INT AUTO_INCREMENT NOT NULL, category_id INT DEFAULT NULL, name VARCHAR(255) NOT NULL, is_active TINYINT(1) DEFAULT \'1\' NOT NULL, INDEX IDX_389B78312469DE2 (category_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB');
为什么不使用schemaTool呢?比如:

$schemaTool = new SchemaTool($em);
        $metaData = $em->getClassMetadata($className);

        if ($this->sm->tablesExist(array($metaData->getTableName())) == true) {
            $this->write("Table already exists :" . $className);
        }
        else{
            $schemaTool->createSchema([
                $metaData
            ]);
        }
这样,它将不取决于我的数据库设置。
我错过什么了吗?或者让schemaTool来处理它,或者使用entitymanager来进行数据迁移,有什么缺点吗

对于这类以讨论为导向的问题,有一种可能更好的解决方法。也可以检查条令文件。我只想说,尝试从一种类型的数据库迁移到另一种类型的数据库要比看起来困难得多。我找不到相关的讨论(在github的某个地方有一张票证),但是开发人员提到,自动生成迁移只是为了方便,而不是一个规范化的工具,如果需要更多的控制,您应该手动生成迁移。@Cerad-我不知道环境中将使用哪个数据库应用程序将在中运行-因此一个环境中的DB类型将是一致的。但我会在松弛通道中询问它。msg Cerad感谢你们的投入-