Php 通过级联删除父级时删除Laravel 5.3多态项

Php 通过级联删除父级时删除Laravel 5.3多态项,php,laravel,laravel-5,eloquent,polymorphism,Php,Laravel,Laravel 5,Eloquent,Polymorphism,我试图在删除父项时删除多态项/关系 我的结构是 - User (hasMany: Page) - - Page (hasMany: Module, belongsTo: User) - - - - Module (belongsTo: Page, morphTo: content()) - - - - - ModuleVideo (morphMany: 'content') - - - - - ModuleAudio (morphMany: 'content') - - - - - Module

我试图在删除父项时删除多态项/关系

我的结构是

- User (hasMany: Page)
- - Page (hasMany: Module, belongsTo: User)
- - - - Module (belongsTo: Page, morphTo: content())
- - - - - ModuleVideo (morphMany: 'content')
- - - - - ModuleAudio (morphMany: 'content')
- - - - - ModuleSomething (morphMany: 'content')
我可以通过ping
Module
直接删除模块和ModuleItem

$module->forceDelete();
$module->content->forceDelete();
User>Page>Module
都已设置好,因此
onDelete
会层叠而下


如果任何家长(
Page
User
)被删除,我如何强制
ModuleVideo/Audio/Something
删除?

您可以尝试创建这样的特征

 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变量在您的类中使用

您能稍微澄清一下您的问题吗?我不明白最后一句话,是问题还是信息?我稍微改写了一下:如果删除了任何家长(
Page
User
),我如何强制
ModuleItem
)删除?ModuleItem在您当前的关系中在哪里?是ModuleVideo/音频/什么的吗?没错。有多个不同的ModuleType可以变形为父模块,但一次只能有一个ModuleItem谢谢,今晚我将继续讨论。我是否在模块类中使用此特性?是的,您可以创建一个扩展模型的ModelItem类,并使用Cascadable特性,然后您的所有items类都扩展ModelItem classI,我将尝试一下