2013-12-13 45 views
4

的是這兩者之間的區別?在註釋Symfony的不同2/2學說

/** 
* @ORM\ManyToOne(targetEntity="Category", inversedBy="products",cascade={"remove"}) 
* @ORM\JoinColumn(name="category_id", referencedColumnName="id") 
*/ 
protected $category; 

/** 
* 
* @ORM\ManyToOne(targetEntity="Category", inversedBy="products") 
* @ORM\JoinColumn(name="category_id", referencedColumnName="id", onDelete="CASCADE")) 
*/ 
protected $category; 

謝謝!

回答

4

第一個告訴ORM來執行自身的級聯。因此,Doctrine會將數據保存在內存中以執行刪除級聯。

第二個會告訴數據庫執行onDelete級聯,卸載從理論的過程。

請記住,第一個選項將保存在內存陣列/協會執行刪除操作級聯,這可真重。

典型使用案例的第一個參數是你的數據模型圖是不是過重的情況下,你真的想benfit每一個實體生命週期事件,即使是那些誰正在使用的級聯刪除。

第二的缺點是,你不能benfit這些實體生命週期事件,但如果你的數據模型/圖真的是太沉重,這可能是應對級聯的唯一選擇。

+0

謝謝,什麼時候使用第一或第二? – Twinsen

+0

編輯我的第一篇文章:)希望這有助於! –

+0

再次感謝... Benfit是什麼?像@PostRemove等? 謝謝! :) – Twinsen