这两者有什么区别?
/**
* @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;
谢谢!
答案 0 :(得分:4)
第一个告诉ORM自己执行级联。因此,Doctrine会将数据保存在内存中以执行删除级联。
第二个将告诉数据库执行onDelete级联,从doctrine卸载进程。
请记住,第一个选项将在内存中保留数组/关联以执行删除级联,这可能非常重。
第一个参数的典型用例是您的数据模型图形不太重,并且您确实希望使每个实体生命周期事件都适合,甚至是那些使用级联删除的事件。
第二个问题的缺点是你不能适应这些实体生命周期事件,但如果你的数据模型/图形真的太重,那么这可能是处理级联的唯一选择。