我有4张桌子。其中两个是单态的,两个是多态的。
单态: 模板、模块
多态: 文档、图像
现在,templates并且modules有documentsandimages并且每个Template都有很多Modules 并且modules有外键设置为在删除时级联templates。
现在,如果我删除 aTemplate关联的Modules 将被删除,但关联的多态关系Module将保留在数据库中。我什么都没试过,因为我完全一无所知。
什么是我能做的,以自动删除关联Module时Template被删除?我认为这里的删除是由数据库本身处理的,而 Eloquent 与它没有任何关系。
因为是多态关系,级联删除不能用外键处理。
如果您仍然希望在数据库级别处理删除,则需要编写某种类型的数据库触发器功能。
如果您想在应用程序级别处理此问题,还有几个选项。
一种选择是更新您的代码,以便在您删除您的任何地方时Template,您还要确保删除它的所有多态关系。
另一种选择是为事件创建一个事件处理程序deleting。deleting每当您删除 Eloquent 模型时,Eloquent 都会触发该事件。在这个删除事件中,您也可以访问多态关系并删除它们。
如果deletingevent 方法听起来不错,那么有一个包可以为您实现所有这些,并且可以很容易地为您的模型设置:shiftonelabs/laravel-cascade-deletes. 完全披露:我写了这个包。
使用这个包,您只需将CascadesDeletes特征添加到您的Template模型中,然后添加一个$cascadeDeletes属性,该属性包含要在删除Template实例时删除的所有关系的数组。