假设我有 User
和 Role
模型。现在我正在做的是从数据库中删除几个用户。例如,我删除了 ID 为 1、2、3 和 4 的用户。现在我想删除数据透视表中 user_id = 1、2、3 或 4 的所有内容。最好的方法是什么?我的意思是 Laravel 实现。
最佳答案
您可以 Hook 用户模型上的删除事件以删除他们的角色。
用户.php
Class User extends Model {
protected static function boot() {
static::deleting(function($model) {
// Whenever we delete a user delete their roles first.
$model->roles()->sync([]);
});
}
function roles() {
return $this->belongsToMany('roles');
}
}
您还可以使用模型事件和观察者来执行此操作,这可能更简洁:https://laravel.com/docs/5.8/eloquent#events .观察者和上述模式的问题是,每当您批量删除时,您都会遇到 n + 1
问题。
如果你想批量删除用户,最有效的方法就是手动从数据透视表中删除数据,像这样:
function deleteUsers($userIds) {
// Delete the users roles
DB::('user_roles')
->whereIn('user_id', $userIds)
->delete();
// Delete the users
User::whereIn('id', $userIds)
->delete();
}
关于php - 删除模型时分离数据透视表中模型的每条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55994122/