我正在努力将现有的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 项目创建的数据库对这些字段同时使用PRIMARY
和UNIQUE
约束。但是,当使用 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
属性会保存下来。但是这样做可以保存吗?
更新后的教义版本是否更聪明,并将PRIMARY
和UNIQUE
的冗余定义缩小到仅PRIMARY
,还是有其他原因导致这种行为?
这是正确的。
您不需要在主字段上唯一。
尽管同时使用 UNIQUE 和 PRIMARY 不是错误,但 UNIQUE 是多余的(使数据库变慢,占用更多磁盘空间),可以安全地删除,应该删除。