【问题标题】:DoctrineMigrationsBundle generates same migration every timeDoctrineMigrationsBundle 每次都生成相同的迁移
【发布时间】:2017-06-28 10:12:45
【问题描述】:

我有一个字段为$usedMB 的实体。我使用 Doctrine2 作为 ORM 和 DoctrineMigrationsBundle 进行数据库迁移。

/**
 * @ORM\Entity
 */
class DeviceStatus
{
    ...

    /**
     * @ORM\Column(type="float", nullable=true, options={"unsigned":true})
     */
    private $usedMB;

    ...
}

如果我执行命令php bin/console doctrine:migrations:diff,我会在迁移文件中得到以下行: ALTER TABLE device_status CHANGE used_mb used_mb DOUBLE PRECISION DEFAULT NULL 之后,我执行命令php bin/console doctrine:migrations:migrate,我得到迁移执行成功的消息。

但问题是 - 如果我再次执行 php bin/console doctrine:migrations:diff,我会在迁移文件中得到相同的行: ALTER TABLE device_status CHANGE used_mb used_mb DOUBLE PRECISION DEFAULT NULL 只是指出 - 在执行命令之间没有进行任何代码更改。

之后,我执行命令 php bin/console dictionary:migrations:migrate,然后再次 - 我收到迁移成功执行的消息。 这可能会永远持续下去。

这是 DB 中具体字段的外观:

有人能解释一下为什么每次都会生成相同的迁移吗?

【问题讨论】:

  • doctrine:schema:update --dump 是否返回相同的查询?
  • 是的。它给出了完全相同的结果。
  • 尝试clear:cache --env=dev
  • 问题是“未签名”选项。如果您查看生成的 SQL,它就会丢失。根据文档,注释用法看起来不错。我可以重现这种行为。即使尝试在添加 Column 后手动设置数据库中的无符号属性也无济于事。可能是一个教义错误本身。删除未签名的选项,它工作正常。
  • 是的,绝对是教义错误,甚至发现了开放的错误报告:github.com/doctrine/dbal/issues/2380 将在教义 2.6 中修复,但尚未发布

标签: mysql symfony doctrine-orm doctrine-migrations


【解决方案1】:

问题是处理带有教义本身的“无符号”选项的错误。

目前在存储库中有一个针对该主题的开放错误报告: https://github.com/doctrine/dbal/issues/2380

该修复程序应与 v2.6 一起发布

【讨论】:

    猜你喜欢
    • 2019-08-30
    • 2012-05-01
    • 2014-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-01
    • 1970-01-01
    • 2021-03-19
    相关资源
    最近更新 更多