php - Laravel 在 hasMany 关系上覆盖删除方法

标签 php laravel laravel-5 eloquent

我正在尝试覆盖模型上的删除方法。

在我的用户模型中我有这段代码:

public function delete()
{
    if ( ! is_null($this->remote_id)) {
        $this->location_id = null;
        $this->save();
    } else {
        parent::delete();
    }
}

基本上,如果 remote_id 为空,此方法会删除记录。如果它不为空,它会通过将 location_id 设置为空来断开用户与该位置的连接。

当我执行 $user->delete() 时,该方法被调用并且工作正常。

但是当我删除像 $location->users()->delete() 这样的位置的所有用户时,不会调用此方法。我做错了什么吗?

最佳答案

如果您希望使用模型方法(或触发模型事件),您需要遍历所有用户并单独删除每个用户,例如:

$location->users->map(function($user) {
  $user->delete();
});

如果您有很多用户,这样的操作可能会非常耗时,所以我宁愿只更新所有相关模型,而不是获取所有模型并在每个模型上调用 delete():

$location->users()->update(['location_id' => null]);

关于php - Laravel 在 hasMany 关系上覆盖删除方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31494097/

相关文章:

php - 在 Laravel 5.5 中生成工厂

php - Symfony2+Doctrine2 : How to properly localize records?

php - 协助从数据库中提取当前记录的用户 ID 和名字

php - Laravel 存储库模式契约

php - 如何修复奇怪的错误 Laravel 路由?

php - 在 Controller 上使用时未找到类 'App\Http\Controllers\Analytics'

php - #1136 - 列数与值数不匹配?

找不到 PHP 5.4 和 Laravel 类 'Memcached'

php - 无法在 5.4 上安装 Laravel/Passport

mysql - 当我尝试显示一列的计数值时,它会计算编号。存储在同一个表的同一行的单个单元格中的数组的数量