我正在尝试覆盖模型上的删除方法。
在我的用户模型中,我有这段代码:
public function delete()
{
if ( ! is_null($this->remote_id)) {
$this->location_id = null;
$this->save();
} else {
parent::delete();
}
}
如果remote_id为null,则此方法基本上会删除记录。如果它不为null,则通过将location_id设置为null来断开用户与该位置的连接。
当我执行$ user-> delete()时,会调用此方法并且它可以正常工作。
但是,当我删除像这样的位置的所有用户时,$ location-> users() - > delete()此方法不会被调用。我做错了吗?
答案 0 :(得分:0)
如果您想要使用模型方法(或模型事件被触发),您需要遍历所有用户并单独删除它们,例如:
$location->users->map(function($user) {
$user->delete();
});
如果你有很多用户,这样的操作可能非常耗时,所以我宁愿只更新所有相关模型,而不是全部取出并在每个模型上调用 delete():< / p>
$location->users()->update(['location_id' => null]);
答案 1 :(得分:0)
你可以试试这个:
// In App/Location.php
public static function boot()
{
parent::boot();
static::deleting(function($location) {
foreach($location->users as $user) {
if( ! is_null($user->remote_id) ) {
$user->location_id = null;
$user->save();
}
else {
$user->delete();
}
}
});
}
当您删除任何User
模型时,这将删除所有location_id
模型,具体取决于location_id
状态(如果null
为Location
),但是location_id
不是null
,user->location_id
的值将更新为null
。