9.3. 防止数据损坏

数据损坏

file

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

Trying to get property of non-object

原因如下:

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

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

两种方法

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

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

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

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

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

上一篇 下一篇
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
贡献者:1
讨论数量: 8

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