【发布时间】:2021-03-30 20:23:17
【问题描述】:
我要删除表中的一个角色。 roles,permissions和permissions_roles的结构分别是:
-- auto-generated definition
create table roles
(
id int auto_increment
primary key,
name varchar(200) null,
created_at timestamp default CURRENT_TIMESTAMP not null,
updated_at timestamp null,
deleted_at timestamp null
);
-- auto-generated definition
create table permissions
(
id int auto_increment
primary key,
name varchar(200) null,
created_at timestamp default CURRENT_TIMESTAMP not null,
updated_at timestamp null,
deleted_at timestamp null
);
-- auto-generated definition
create table permission_role
(
role_id int not null,
permission_id int not null,
created_at timestamp default CURRENT_TIMESTAMP not null,
updated_at timestamp null,
deleted_at timestamp null,
constraint fk2
foreign key (role_id) references roles (id)
on update cascade on delete cascade,
constraint fk3
foreign key (permission_id) references permissions (id)
on update cascade on delete cascade
);
create index permission_role_index
on permission_role (role_id);
create index role_permission_index
on permission_role (permission_id);
所以,我有RolesModel 和PermissionsModel 如下:
class BaseModel extends Model
{
protected $table;
protected $primaryKey;
use SoftDeletes;
}
<?php
namespace App\Model;
use Carbon\Carbon;
class RolesModel extends BaseModel
{
protected $table = 'roles';
protected $primaryKey = 'id';
protected static function boot()
{
parent::boot(); // TODO: Change the autogenerated stub
static::deleting(function ($roles){
$roles->permissions()->detach();
$roles->groups()->detach();
});
}
public function permissions()
{
return $this->belongsToMany(
PermissionsModel::class,
'permission_role',
'role_id',
'permission_id');
}
public function groups()
{
return $this->belongsToMany(GroupsModel::class, 'group_role');
}
}
<?php
namespace App\Model;
class PermissionsModel extends BaseModel
{
protected $table = "permissions";
protected $primaryKey = "id";
public function roles()
{
return $this->belongsToMany(RolesModel::class, 'permission_role');
}
}
现在,当我删除一个角色时,虽然roles的记录是通过软删除删除的,但permission_role里面的所有行都不会被删除。如何对permission_role 表应用软删除?
【问题讨论】:
-
使用分离或附加
标签: php mysql laravel eloquent soft-delete