我正在采取Symfony2实体关系的第一步。 我有一个实体安装,每个都有一个仪表和一个监视器。Symfony2 OneToOne关系变成唯一索引还是外键?
这转化为单向关系,这是我定义为这样:
/**
*
* @ORM\OneToOne(targetEntity="InfoMeter")
* @ORM\JoinColumn(name="meterid", referencedColumnName="id")
*/
private $meter;
/**
*
* @ORM\OneToOne(targetEntity="InstallationsRtu")
* @ORM\JoinColumn(name="monitorid", referencedColumnName="id")
*/
private $monitor;
每个监视器只能被分配给一个安装。 每个电表可以分配给多个安装。
当我更新我的数据库(app/console doctrine:schema:update --force)时,有两个结果。
在监视器的情况下:
一切都会好起来的,模式会以'UNIQ_'作为前缀的键名得到更新。
在仪表的情况下: 我收到以下错误
PDOException]
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1' for key 'UNIQ_43D26968860BE41D'
当我看看表结构后,这个错误发生,我找不到提到的约束,但我确实发现FK_43D26968860BE41D,即相同,但以“FK”作为前缀。
在安装表,我现在有这些上市:
Keyname Type Unique Packed Field Cardinality
PRIMARY BTREE Yes No id 2
UNIQ_43D26968701EC1AB BTREE Yes No monitorid 2
FK_43D26968860BE41D BTREE No No meterid 2
所以,一个说“独特=是”,而另一个说,“独特=否”。
为了达成我的问题:
我该如何判断它是UNIQ索引还是FK索引? 我认为Doctrine发现目前每个monitorid在安装表中都是唯一的,但是每个meterid在安装表中都会出现几次。
因此,它与UNIQ的第一个和FK的后者。但是,我能以某种方式控制它吗?
这里是一个完全的noobish错误,由OneToOne和OneToMany不清晰造成的。尽管如此,我仍然会在这里留下它,为了未来的小菜鸟;) – Dieter