php - Laravel 6.x 关系在关系伙伴上删除时设置默认值
问题描述
我有以下两个模型:
stockItem
.category
stockItem
可以有一个category
,category
也可以有很多stockItem
。
总是有第一个 id为category
1 的类别。它不能被删除。
现在如果category
id 为 2 被删除,所有stockItem
与 second 有关系的category
都应该更新为 first category
。
ORM 能做到这一点还是我需要编写自己的删除函数?如果是这样,我该如何覆盖删除功能?
解决方案
有一种方法可以解决这个问题,但您必须进行一些修改。
LaravelonDelete
在运行迁移时有动作。对于您的问题,我认为合适的是:
->onDelete('set null');
为了进行这项工作,您必须将外键 ( categoryId
) 更改为可为空。
这样做后,当您删除一个类别时,该类别所拥有的所有关系都将其字段设置为 null,这意味着它们将属于category1
永远无法删除的。
这是使用纯迁移的方法,这是您可以获得的最接近的方法。这样,您将知道当 categoryId 为 null 或 1 时,此库存物品属于 category1 或被转移到它导致另一个类别被删除。
如果你真的需要 id 为 1,那么你应该使用你自己构建的帮助类,或者Laravel Observers。
推荐阅读
- c# - 如何在 C# 中访问结构数组中的元素成员
- google-chrome - 如何防止浏览器按范围从内存缓存中加载js?
- php - 在 php laravel 中拆分数据
- angular - 无法在 Visual Studio 2019 中调试 Asp.Net Core 2.1 Angular 应用程序
- deep-learning - 线性层的 PyTorch 和 Chainer 实现——它们是等价的吗?
- ios - 我正在尝试通过下拉 UIScrollView 来刷新所有放置在 UIScrollView 上的一组 UICollectionView
- javascript - 如何在html中显示滑块值?
- android - Kotlin函数中参数的动态数量?
- r - scale_x_continuous 的中断似乎不起作用
- python - 仅当主机在 python 中可 ping 时才尝试将主机写入 csv