我在has_many的关系上有这样一个观察者:
Post has_many CommentsComments激活了以下Observer:
class Observer_Comments
{
public function before_delete($model)
{
Log::info("Deleted a comment");
}
public function before_update($model)
{
Log::info("Updated a comment");
}
}当我像这样更新我的Post模型时:
$post = Post::find(1)->related('comments);
unset($post->comments[1]);
$post->save();我的日志没有显示任何活动。Comment被删除,Post被正确更新,包括运行它的任何观察者。
当我明确删除评论时:
$comment = Comment::find(1);
$comment->delete();然后日志显示了我所期望的:
INFO --> Deleted a Comment是否有我必须使用的cascade设置?
更新
我在Model::save()中看到了这段代码
1127 if (method_exists($rel, 'delete_related'))
1128 {
1129 $rel->delete_related($this);
1130 }是否需要将delete_related方法添加到Post或Comments模型中?
发布于 2013-07-19 19:53:51
Unset()不删除相关对象,而是取消两者之间的关系。
在很多情况下,这也意味着连接两者的连接表中的记录将被删除,在其他关系中,外键将被重置为空。
这两个操作都不会更改对象的数据,因此不会在对象上触发更新,因此不会调用观察者。
“级联”意味着,如果您删除一个对象,删除将“级联”到相关对象,也删除该对象。但是,只有当您删除关系中的“父”,而不是当您取消它(这不会删除任何东西)。
https://stackoverflow.com/questions/17665653
复制相似问题