为什么Symfony 3.4 / Doctrine 2.6删除了我的ID字段上的唯一约束



我正在努力将现有的Symfony 2.8项目迁移到Symfony 3.4。除了Symfony,我还更新了一些其他组件,比如Doctrine:

                                  Symfony 2.8       Symfony 3.4
------------------------------------------------------------------------
symfony/symfony                   v2.8.49           v3.4.21
doctrine/annotations                       v1.6.0           
doctrine/cache                             v1.8.0         
doctrine/collections                       v1.5.0
doctrine/common                   v2.8.1            v2.10.0
doctrine/dbal                     v2.6.3            v2.9.2
doctrine/doctrine-bundle                   1.10.0
doctrine/doctrine-cache-bundle             1.3.5
doctrine/event-manager                              v1.0.0
doctrine/inflector                         v1.3.0
doctrine/instantiator                      1.1.0
doctrine/lexer                             v1.0.1
doctrine/orm                      v2.5.14           v2.6.3 
doctrine/persistence                                v1.1.0
doctrine/reflection                                 v1.0.0 

在某些实体上,我使用 GUID 作为主键:

class SomeEntity {
    /**
     * @ORMId
     * @ORMColumn(name="guid", type="guid", unique=true)
     */
    protected $guid;
    ...
 }

使用 SF 2.8 项目创建的数据库对这些字段同时使用PRIMARYUNIQUE约束。但是,当使用 SF 3.4 原则运行数据库更新时,希望删除UNIQUE约束:

bin/console doctrine:schema:update --dump-sql
The following SQL statements will be executed:
 DROP INDEX UNIQ_D3D1CD162B6FCFB2 ON some_enitiy;

这是对的吗?

由于这些字段仍被定义为PRIMARY因此它们无论如何都应该是唯一的,我认为删除 UNIQUE 属性会保存下来。但是这样做可以保存吗?

更新后的教义版本是否更聪明,并将PRIMARYUNIQUE的冗余定义缩小到仅PRIMARY,还是有其他原因导致这种行为?

这是正确的。

您不需要在主字段上唯一。

尽管同时使用 UNIQUE 和 PRIMARY 不是错误,但 UNIQUE 是多余的(使数据库变慢,占用更多磁盘空间),可以安全地删除,应该删除。

相关内容

最新更新