php - Laravel - 如何删除具有 belongsTo 关系的模型的多态关系?

标签 php laravel

我有 4 张 table 。其中两个是单态的,其中两个是多态的。

单态:
模板、模块

多态:
文件、图像

现在,templatesmodules两者都有documentsimages每个 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/

相关文章:

php - 为什么PHP上传的一些图片会自动旋转90度?

php - PHP禁止第三方库警告

php - Laravel 您请求了 1 件商品,但只有 0 件可用

laravel - 挂载的ConfigMap没有设置环境变量

laravel - [Vue警告]:未知的自定义元素:<post>-您是否正确注册了组件?

php - 在 array_walk_recursive 函数之后获取父数组名称

javascript - HTML 拖放 OnDrop Ajax 事件

php - 我该如何使用 Facebook 访问 token ?

mysql - 使用 Laravel 查询 sql 中的 json 列

laravel - 如何在 Laravel 中将一个模型绑定(bind)到另一个模型