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

时间:2017-01-27 10:56:38

标签: 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')
- - - - - ModuleSomething (morphMany: 'content')

我可以通过直接ping Module来删除Module和ModuleItem;

$module->forceDelete();
$module->content->forceDelete();

User > Page > Module全部设置,因此onDelete级联。

如果删除了任何父母(ModuleVideo/Audio/SomethingPage),如何强制User删除?

1 个答案:

答案 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变量

来在您的类中使用