对于保存-删除关系,Observer调用before_update,但不调用before_delete



我有一个关于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方法添加到我的PostComments0模型中?

Unset()不会删除相关对象,而是取消设置两者之间的关系。

在多个的情况下,这也意味着连接表中连接两者的记录将被删除,在其他关系中,外键将重置为NULL。

这两个操作都不会更改对象的数据,因此不会在对象上触发UPDATE,因此不会调用观测器。

"级联"意味着,如果删除一个对象,则删除将"级联"到相关对象,同时也删除该对象。但只有当您删除关系中的"父对象"时,而不是当您取消设置它时(这不会删除任何内容)。

相关内容

最新更新