我正在採取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