2

我想向那些使用 Mysql + Doctrine ORM + Doctrine 迁移的人提出问题,我有一个关联:

    /**
     * @var User
     *
     * @ORM\ManyToOne(targetEntity="User")
     * @ORM\JoinColumn(nullable=true)
     */
    protected $sender;

(这里的重点是nullable=true。有些属性是故意留下的)

  1. 我愿意migraions:diff- 用一块生成迁移sender_id VARCHAR(255) DEFAULT NULL
  2. 运行迁移
  3. 然后我再做diff一次,预计不会产生新的迁移
  4. 但不,我看到带有行的新文件CHANGE sender_id sender_id VARCHAR(255) DEFAULT NULL

这意味着什么都不会改变,但是Mysql 驱动下的学说 dbal 并没有从实体注释中看到 DEFAULT NULL

我试图添加@ORM\Column(options={"default": NULL}).

这有助于防止DEFAULT NULL迁移,但在这种情况下,FK 和 Index被删除了。

也尝试添加columnDefinition="VARCHAR(255) DEFAULT NULL"但也没有工作

你是如何解决这个问题的?

4

1 回答 1

1

我遇到过同样的问题。就我而言(Symfony,使用带有图像“mariadb:10.5.8”的 Docker),解决方案是server_version在配置中设置正确的:

doctrine:
    dbal:
        server_version: '5.7' # (this was previously incorrect in my setting!)

        server_version: 'mariadb-10.5.8' # (correct version for my setting, please adjust accordingly!)

在这样做并重新启动 Docker 之后,它diff是空的(“在您的映射信息中未检测到任何更改。”)。

所有功劳归于“tristanbes 于 2018 年 4 月 4 日发表评论”的帖子,请参阅以下链接:

https://github.com/doctrine/dbal/issues/2985

于 2021-02-14T13:34:00.283 回答