【问题标题】:Symfony/Doctrine keeps creating the same migrationSymfony/Doctrine 不断创建相同的迁移
【发布时间】:2019-10-30 21:28:05
【问题描述】:

编辑:原来同一台机器上的其他项目也有同样的问题。问题是针对一个特定项目的:

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

谁知道为什么?

【问题讨论】:

标签: php symfony doctrine-orm database-migration


【解决方案1】:

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

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

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

虽然它并不真正关心版本。我打错字并写了12.2.14,它工作得非常好。我猜它在某处有一个version>$n 检查。

【讨论】:

    【解决方案2】:

    这里解释了一切: 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

    【讨论】:

      猜你喜欢
      • 2018-08-01
      • 2019-03-22
      • 1970-01-01
      • 2013-06-09
      • 2018-10-06
      • 2021-09-24
      • 2018-03-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多