Symfony/Doctrine不断创造相同的迁移



编辑:事实证明,同一台计算机上的其他项目也遇到了同样的问题。问题是针对一个特定的项目:

我有一个Symfony4项目,其中我有几个实体(通过make:entity创建(。我刚刚注意到最后 4 次迁移中具有完全相同的查询(是的,我在两者之间运行迁移(。例:

$this->addSql('ALTER TABLE event CHANGE visible_from visible_from DATETIME DEFAULT NULL, CHANGE visible_till visible_till DATETIME DEFAULT NULL, CHANGE max_signups max_signups INT DEFAULT NULL');

我手动运行了该查询,这实际上更新了表。然后,我创建了一个新的迁移来测试:上面的查询再次出现。

我已经清除了缓存,运行了doctrine:cache:clear-metadata,仔细检查了奇怪的东西,但一切都很正常。

我每次都有相同的 3 个查询,它们都有一个共同点:它们具有 nullable=true。所有其他实体中没有 nullable=true。

/**
 * @ORMColumn(type="integer", nullable=true)
 */
private $maxSignups;

向下迁移可能是一个提示:

ALTER TABLE event CHANGE visible_from visible_from DATETIME DEFAULT 'NULL',
                                                  This I find odd---^

MariaDB 版本:10.2.14
PHP: 7.2.4
symfony/orm-pack: "^1.0">

有谁知道为什么?

我仍然不知道为什么(所以我会暂时搁置这个问题(,但这就是我所做的:

我同时运行MySQL和MariaDB,它默认为MySQL。关闭它,切换到MariaDB并在doctrine.yaml中添加一个版本:

doctrine:
    dbal:
        # configure these for your database server
        driver: 'pdo_mysql'
        server_version: 'mariadb-10.2.14'

不过,它并不真正关心版本。我写了一个错字并写了12.2.14它绝对没问题。我猜它在某处有一个version>$n检查。

一切都在这里解释:https://github.com/symfony/symfony-docs/pull/9547#issue-179389686

最重要的是设置前缀"mariadb"的server_version,MariaDB版本不太重要。

或者,您可能根本不设置server_version,然后应该自动检测它。

下面是负责解析server_version的 DBAL 驱动程序函数:

public function createDatabasePlatformForVersion($version)
{
    $mariadb = false !== stripos($version, 'mariadb');
    if ($mariadb && version_compare($this->getMariaDbMysqlVersionNumber($version), '10.2.7', '>=')) {
        return new MariaDb1027Platform();
    }
    if ( ! $mariadb && version_compare($this->getOracleMysqlVersionNumber($version), '5.7.9', '>=')) {
        return new MySQL57Platform();
    }
    return $this->getDatabasePlatform();
}

这是整个班级的链接:https://github.com/doctrine/dbal/blob/f76bf5ef631cec551a86c2291fc749534febebf1/lib/Doctrine/DBAL/Driver/AbstractMySQLDriver.php#L133

相关内容

  • 没有找到相关文章