2013-12-13 43 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