【问题标题】:Laravel Model Restore EventLaravel 模型恢复事件
【发布时间】:2018-11-13 13:06:24
【问题描述】:

所以我有 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

【问题讨论】:

    标签: php laravel laravel-5 eloquent


    【解决方案1】:

    它不起作用,因为$user->staff() 不会获取已删除的员工。这就是默认情况下关系的运作方式。

    只需将其替换为:

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

    【讨论】:

    • 我相信,我们不必在 Laravel 5.5 中使用“withTrashed()”。没有它我们也能做到。
    【解决方案2】:

    恢复一批模型时,永远不会触发“static::restoreing”事件。

    如果你正在做类似的事情:

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-10-20
      • 2016-10-03
      • 1970-01-01
      • 2022-07-29
      • 2015-10-25
      • 1970-01-01
      • 2013-10-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多