不同于注释Symfony 2 / Doctrine 2

时间:2013-12-13 16:30:49

标签: php symfony doctrine-orm

这两者有什么区别?

/**
* @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;

谢谢!

1 个答案:

答案 0 :(得分:4)

第一个告诉ORM自己执行级联。因此,Doctrine会将数据保存在内存中以执行删除级联。

第二个将告诉数据库执行onDelete级联,从doctrine卸载进程。

请记住,第一个选项将在内存中保留数组/关联以执行删除级联,这可能非常重。

第一个参数的典型用例是您的数据模型图形不太重,并且您确实希望使每个实体生命周期事件都适合,甚至是那些使用级联删除的事件。

第二个问题的缺点是你不能适应这些实体生命周期事件,但如果你的数据模型/图形真的太重,那么这可能是处理级联的唯一选择。