9.3. 防止数据损坏

本教程最新版为 9.x,当前版本已放弃维护,请阅读最新版本!

数据损坏

file

上图是我们在开发『内容管理』后台时,出现的错误:

Trying to get property of non-object

原因如下:

这是数据损坏所致 —— 我们删除了用户,却没有删除用户发布的话题,此部分话题变成了遗留数据。话题列表中渲染到这些遗留数据时,因为不存在作者,却取作者的 avatar 头像属性,故报错。

接下来我们将修复此错误。

两种方法

要避免这类错误的发生,只需要在关联数据删除时,基于业务逻辑做联动删除即可。例如删除话题时,将所属的回复删除;或者是删除用户时,将用户发布过的话题和回复删除。

从实现的机制来看,可以有分以下两种类型:

  • 代码监听器 —— 利用 Eloquent 监控器deleted 事件连带删除,好处是灵活、扩展性强,不受底层数据库约束,坏处是当删除时不添加监听器,就会出现漏删;
  • 外键约束 —— 利用 My...

本文章首发在 LearnKu.com 网站上。

为了保证课程的高品质,我们需要对课程进行收费。付费后 才能观看剩余内容。 购买

上一篇 下一篇
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 11

yangshuolll
执行 PHP artisan migrate 数据库迁移时报这个错误,已解决
5 个点赞 | 5 个回复 | 问答 | 课程版本 5.7
hehorange
遗漏了分类下的话题外键?
2 个点赞 | 4 个回复 | 问答 | 课程版本 5.5
caojianx
突然的自我
Eloquent 监控器如何写 deleted 方法
0 个点赞 | 3 个回复 | 问答 | 课程版本 5.5
nhyzs
General error: 1826 外键约束名称重复
0 个点赞 | 1 个回复 | 分享 | 课程版本 8.x
jxdr
分类给删除了,那怎么关联删除 话题呢?
0 个点赞 | 1 个回复 | 分享 | 课程版本 5.8
xuecong
软删除如何使用外键约束?
0 个点赞 | 1 个回复 | 问答 | 课程版本 5.7