Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel-如何删除具有belongsTo关系的模型的多态关系?_Php_Laravel - Fatal编程技术网

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您的建议是:首先检查相关模块,然后针对每个模块检查文档和图像,并逐个删除它们。