我有 4 张 table 。其中两个是单态的,其中两个是多态的。
单态:
模板、模块
多态:
文件、图像
现在,templates
和 modules
两者都有documents
和 images
每个 Template
有很多Module
s 和 modules
具有设置为在删除 templates
时级联的外键.
现在,如果我删除 Template
相关 Module
s 将被删除,但 Module
的关联多态关系将留在数据库中。我没有尝试过任何事情,因为我完全一无所知。
我可以做的任何事情来自动删除 Module
的关联当Template
被删除?我认为这里的删除是由数据库本身处理的,而 Eloquent 与它没有任何关系。
最佳答案
因为是多态关系,级联删除不能用外键处理。
如果您仍希望在数据库级别处理删除,则需要编写某种类型的数据库触发器功能。
如果您想在应用程序级别处理此问题,还有几个选项。
一种选择是更新您的代码,以便在任何地方删除您的 Template
,你还要确保删除它的所有多态关系。
另一种选择是为 deleting
创建一个事件处理程序。事件。 deleting
每当您删除 Eloquent 模型时,Eloquent 都会触发事件。在此删除事件中,您也可以访问多态关系并删除它们。
如果 deleting
event 方法听起来不错,有一个包可以为您实现所有这些,并且可以很容易地为您的模型设置: shiftonelabs/laravel-cascade-deletes
.完全披露:我写了这个包。
使用此软件包,您只需添加 CascadesDeletes
你的特质Template
模型,然后添加 $cascadeDeletes
Template
时要删除的所有关系的数组的属性。实例被删除。
关于php - Laravel - 如何删除具有 belongsTo 关系的模型的多态关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41306620/