为什么为每个理论迁移都设置默认值?

Mol*_*rro 5 symfony doctrine-orm doctrine-migrations

我使用Symfony 2.7,教义/ orm 2.5和教义捆绑1.5。在Cargo实体中,我有财产price

    /**
     * @var float
     *
     * @ORM\Column(name="price", type="float", options={"unsigned":true, "default":0})
     */
    protected $price;
Run Code Online (Sandbox Code Playgroud)

在每个学说迁移课程中,我都有:

$this->addSql('ALTER TABLE cargo CHANGE price price DOUBLE PRECISION DEFAULT \'0\' NOT NULL');
Run Code Online (Sandbox Code Playgroud)

尽管如此,之前已经执行了迁移,并且已经设置了价格的默认值。为什么会发生这种情况以及如何解决?还是最好直接将默认值设置为property?根据Doctrine文档,两个选项均可用:

Jok*_*bas 0

这是因为您的数据库将0默认值转换为0.00. 当\Doctrine\DBAL\Schema\Comparator::compareTables尝试将当前模式与预期模式进行比较时 - 发现这些列声明不相同: NUMERIC(10, 2) DEFAULT '0.00' NOT NULLvs NUMERIC(10, 2) DEFAULT '0' NOT NULL(from \Doctrine\DBAL\Platforms\AbstractPlatform::columnsEqual)

所以解决方案是在默认值中使用与数据库相同的格式 -options={"unsigned":true, "default":"0.00"})