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')
我可以通过pingModule
直接删除模块和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,我将尝试一下