我目前正在为一个 symfony 项目设置学说迁移。我想知道为什么自动生成的迁移使用直接 SQL 语句。例如,这些将其限制为 mysql 和 INNODB-enginge(因为它是我的本地环境)。但是它将运行的项目的数据库环境可能会有所不同。
为什么它不让实体经理处理这种事情?
例如,在 up-function 中,它会生成如下内容:
$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进行数据迁移是否有缺点?