我在DB複合主鍵一些表組合鍵的表,見下圖:生成ID鍵與使用Doctrine2和Symfony2的
正如你在這種情況下,看到的是interest
和klists
哪些有他們自己的id
但也有kuser
也是關鍵。 Doctrine docs表示,它們支持組合鍵中的幾乎所有用例,但每個使用組合鍵的實體都不能使用「ASSIGNED」以外的ID生成器。這意味着在調用EntityManager#persist($ entity)之前,ID字段必須設置其值。當我嘗試定義任何有關我有一個錯誤的表的實體,因爲教義不允許有這樣的:
/**
* @ORM\Id
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Id
* @ORM\ManyToOne(targetEntity="UserBundle\Entity\User", inversedBy="users")
* @ORM\JoinColumn(name="kuser", referencedColumnName="id")
*/
protected $kuser;
我知道,我可以用生命週期回調,但不要運行一些代碼不知道如何或在哪裏,所以我需要一些幫助,任何人都可以告訴我或指出我在正確的道路?
爲什麼你需要id和kuser來複合? AutoIncremented ID已經是唯一的了。爲什麼要將kuser添加到組合中?只需從kuser中刪除ORM \ Id。 – Cerad
@Cerad因爲它也需要一個KEY,我不能刪除 – Reynier
kuser仍然可以是一個關鍵。它只包含kuser.id中的任何內容,這也是唯一的。在堅持的過程中,學說將爲你設置它。學說也會產生一個索引,並照顧級聯。如果需要,你也可以給它一個獨特的約束。我想你可能已經過分地混淆了複合關鍵路徑。在Doctrine 2中真正看到它的唯一時間是生成的ManyToMany表中沒有附加屬性。 – Cerad