Laravel模型还原事件

时间:2018-02-27 20:25:42

标签: php laravel laravel-5 eloquent

所以我有2个型号的用户&员工。他们彼此之间有一对一的关系。

User.php' hasOne'员工 和 Staff.php' belongsTo'用户

当我软删除用户时我想要软删除员工条目,我已经实现了这个(完美地工作):

static::deleting(function ($user) {
    $user->staff()->delete(); 
});

现在我想在恢复用户时恢复工作人员,因为我已尝试使用此功能(不工作):

static::restoring(function ($user) {
    $user->staff()->restore();
});

但这不起作用。用户条目已删除,但工作人员条目仍保持软删除状态。

  • 有人能帮助我理解我在这里做错了吗?

  • 此外,这是完成此操作的最佳方法吗?或者还有其他方法可以做到吗?

PS:我使用的是Laravel 5.5

2 个答案:

答案 0 :(得分:3)

它无效,因为$user->staff()无法获取已删除的人员。这就是关系默认工作的方式。

只需将其替换为:

static::restoring(function ($user) {
    $user->staff()->withTrashed()->restore();
});

答案 1 :(得分:1)

还原一批模型时永远不会触发“ static :: restoring”事件。

如果您正在执行以下操作:

Yourmodel::whereIn('id', [1,2,3])->restore();

它将恢复您的模型,但将永远不会触发“ static :: restoring or restore”,而是可以执行以下操作:

$models = Yourmodel::whereIn('id', [1,2,3])->get();
foreach($models as $model) {
   $model->restore();
}