我有一个关于has_many关系的Observer,如下所示:
Post has_many Comments
并且CCD_ 1激活了以下CCD_
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
0模型中?
Unset()不会删除相关对象,而是取消设置两者之间的关系。
在多个的情况下,这也意味着连接表中连接两者的记录将被删除,在其他关系中,外键将重置为NULL。
这两个操作都不会更改对象的数据,因此不会在对象上触发UPDATE,因此不会调用观测器。
"级联"意味着,如果删除一个对象,则删除将"级联"到相关对象,同时也删除该对象。但只有当您删除关系中的"父对象"时,而不是当您取消设置它时(这不会删除任何内容)。