我在删除父级时试图删除多态项/关系。
我的结构是;
- User (hasMany: Page)
- - Page (hasMany: Module, belongsTo: User)
- - - - Module (belongsTo: Page, morphTo: content())
- - - - - ModuleVideo (morphMany: 'content')
- - - - - ModuleAudio (morphMany: 'content')
- - - - - ModuleSomething (morphMany: 'content')
我可以通过直接ping Module
来删除Module和ModuleItem;
$module->forceDelete();
$module->content->forceDelete();
User > Page > Module
全部设置,因此onDelete
级联。
如果删除了任何父母(ModuleVideo/Audio/Something
或Page
),如何强制User
删除?
答案 0 :(得分:0)
您可以尝试创建这样的特征
trait Cascadable {
public static function bootCascade()
{
static::deleting(function ($model) {
if (property_exists($model, 'cascade') && is_array($model->cascade)) {
foreach ($model->getCascade() as $relation) {
if (method_exists($model, $relation)) {
foreach ($model->{$relation}()->get() as $related)
$related->delete();
}
}
}
});
}
protected function getCascade() {
return $this->cascade;
}
通过在每个类中定义受保护的$ cascade变量
来在您的类中使用