Php Laravel-如何删除具有belongsTo关系的模型的多态关系?
我有四张桌子。其中两个是单态的,两个是多态的 单态: 模板、模块 多态性: 文件、图像 现在,Php Laravel-如何删除具有belongsTo关系的模型的多态关系?,php,laravel,Php,Laravel,我有四张桌子。其中两个是单态的,两个是多态的 单态: 模板、模块 多态性: 文件、图像 现在,模板和模块都有文档和图像,每个模板都有许多模块和模块都有外键,外键设置为在删除模板时级联 现在,如果我删除模板,关联的模块s将被删除,但模块的关联多态关系将保留在数据库中。我什么都没试过,因为我完全不懂 当模板被删除时,我能做些什么来自动删除模块的关联?我认为这里的删除是由数据库本身处理的,而Eloquent与此无关。因为它是一种多态关系,所以级联删除不能由外键处理 如果仍然希望在数据库级别处理删除,则
模板
和模块
都有文档
和图像
,每个模板
都有许多模块
和模块
都有外键,外键设置为在删除模板时级联
现在,如果我删除模板
,关联的模块
s将被删除,但模块
的关联多态关系将保留在数据库中。我什么都没试过,因为我完全不懂
当模板
被删除时,我能做些什么来自动删除模块
的关联?我认为这里的删除是由数据库本身处理的,而Eloquent与此无关。因为它是一种多态关系,所以级联删除不能由外键处理
如果仍然希望在数据库级别处理删除,则需要编写某种类型的数据库触发器功能
如果您想在应用程序级别处理此问题,还有几个选项
一个选项是更新代码,这样无论您在哪里删除模板
,您都可以确保删除它的所有多态关系
另一个选项是为删除事件创建事件处理程序。每当您删除一个雄辩的模型时,雄辩就会触发deleting
事件。在这个删除事件中,您可以访问多态关系并删除它们
如果删除
事件方法听起来不错,那么有一个包可以为您实现所有这一切,并使您的模型的设置变得非常简单:。充分披露:我写的包
使用这个包,您只需将CascadesDeletes
特性添加到模板
模型中,然后添加一个$cascadeDeletes
属性,该属性包含删除模板
实例时要删除的所有关系的数组。它不是完全自动的,但是我用destroy()
elount方法很容易处理它。此外,当你使用它时,它就像一个符咒
例如:
$template = Template::find(1);
Module::destroy($template->modules);
$template->delete();
我只想在destroy方法中添加一行,删除您想要删除的内容delete@lewis4u您的建议是:首先检查相关模块,然后针对每个模块检查文档和图像,并逐个删除它们。