Symfony / Doctrine继续创建相同的迁移

时间:2019-06-17 09:44:34

标签: php symfony doctrine-orm database-migration

编辑:证明同一台计算机上的其他项目也存在相同的问题。问题是针对一个特定项目:

我有一个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。

/**
 * @ORM\Column(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”

知道为什么吗?

2 个答案:

答案 0 :(得分: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条支票。

答案 1 :(得分:0)

这里介绍了所有内容: https://github.com/symfony/symfony-docs/pull/9547#issue-179389686

最重要的是将server_version设置为前缀“ mariadb”,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