我有像这样的has_many关系的观察者:
Post has_many Comments
且Comments
已激活以下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
模型中?
答案 0 :(得分:2)
Unset()不会删除相关对象,它会取消两者之间的关系。
如果是多个,这也意味着连接两者的联结表中的记录将被删除,在其他关系中,外键将被重置为NULL。
两个操作都不会改变对象的数据,因此不会在对象上触发UPDATE,因此不会调用观察者。
“cascade”表示如果删除对象,删除将“级联”到相关对象,也删除它。但是,只有当您删除关系中的“父”时,才会删除它(不删除任何内容)。