首页 > 解决方案 > Laravel 6.x 关系在关系伙伴上删除时设置默认值

问题描述

我有以下两个模型:

stockItem.category

stockItem可以有一个categorycategory也可以有很多stockItem

总是有第一个 id为category1 的类别。它不能被删除。

现在如果categoryid 为 2 被删除,所有stockItem与 second 有关系的category都应该更新为 first category

ORM 能做到这一点还是我需要编写自己的删除函数?如果是这样,我该如何覆盖删除功能?

标签: phplaravelorm

解决方案


有一种方法可以解决这个问题,但您必须进行一些修改。

LaravelonDelete在运行迁移时有动作。对于您的问题,我认为合适的是:

->onDelete('set null');

为了进行这项工作,您必须将外键 ( categoryId) 更改为可为空。

这样做后,当您删除一个类别时,该类别所拥有的所有关系都将其字段设置为 null,这意味着它们将属于category1永远无法删除的。

这是使用纯迁移的方法,这是您可以获得的最接近的方法。这样,您将知道当 categoryId 为 null 或 1 时,此库存物品属于 category1 或被转移到它导致另一个类别被删除。

如果你真的需要 id 为 1,那么你应该使用你自己构建的帮助类,或者Laravel Observers


推荐阅读