首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Fuelphp保存删除关系,观察者调用before_update,但不调用before_delete

Fuelphp保存删除关系,观察者调用before_update,但不调用before_delete
EN

Stack Overflow用户
提问于 2013-07-15 23:31:41
回答 1查看 990关注 0票数 0

我在has_many的关系上有这样一个观察者:

代码语言:javascript
复制
Post has_many Comments

Comments激活了以下Observer

代码语言:javascript
复制
class Observer_Comments
{
    public function before_delete($model)
    {
        Log::info("Deleted a comment");
    }
    public function before_update($model)
    {
        Log::info("Updated a comment");
    }
}

当我像这样更新我的Post模型时:

代码语言:javascript
复制
$post = Post::find(1)->related('comments);
unset($post->comments[1]);
$post->save();

我的日志没有显示任何活动。Comment被删除,Post被正确更新,包括运行它的任何观察者。

当我明确删除评论时:

代码语言:javascript
复制
$comment = Comment::find(1);
$comment->delete();

然后日志显示了我所期望的:

代码语言:javascript
复制
INFO --> Deleted a Comment

是否有我必须使用的cascade设置?

更新

我在Model::save()中看到了这段代码

代码语言:javascript
复制
1127    if (method_exists($rel, 'delete_related'))
1128    {
1129        $rel->delete_related($this);
1130    }

是否需要将delete_related方法添加到PostComments模型中?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-19 19:53:51

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

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

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

“级联”意味着,如果您删除一个对象,删除将“级联”到相关对象,也删除该对象。但是,只有当您删除关系中的“父”,而不是当您取消它(这不会删除任何东西)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17665653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档