我正在尝试覆盖模型上的删除方法。
在我的用户模型中我有这段代码:
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/