软删除记录在phpmyadmin中默认不可见,因其仅显示deleted_at is null的行;需在sql标签页执行select * from users where deleted_at is not null查询全部软删除数据。

软删除记录在phpMyAdmin里默认不可见
因为 Laravel 的软删除只是把 deleted_at 字段设为非空时间戳,而不是真正删掉行。phpMyAdmin 默认只显示 deleted_at IS NULL 的记录,所以你查不到那些“被删了但还在”的数据。
解决办法很简单:手动加查询条件。不要依赖“浏览”页签的默认结果,直接切到 SQL 页签执行自定义查询。
用 SQL 查询所有软删除记录(含已恢复的)
在 phpMyAdmin 的 SQL 标签页中运行以下语句,就能看到全部软删除状态的行:
SELECT * FROM `users` WHERE `deleted_at` IS NOT NULL;
如果表名不是 users,替换成你实际的表名(比如 posts、orders)。注意反引号不能省,尤其当表名是保留字或含短横线时。
-
IS NOT NULL是关键,Laravel 软删除后该字段存的是类似'2024-05-12 08:32:15'的字符串,不是NULL - 如果想同时看“正常”和“已软删”的记录,用
WHERE deleted_at IS NOT NULL OR deleted_at IS NULL—— 但这等价于不加条件,意义不大 - 别用
deleted_at != ''或deleted_at != '0000-00-00 00:00:00',MySQL 8+ 默认严格模式下这些写法可能不生效
恢复某条软删除记录前先确认它确实存在
执行恢复操作前,务必先查一遍这条记录是否还在数据库里,避免误判成“没删成功”而重复插入。
例如你想恢复 ID 为 123 的用户:
SELECT id, name, email, deleted_at FROM `users` WHERE id = 123 AND `deleted_at` IS NOT NULL;
如果返回一行且 deleted_at 有值,说明它处于软删除状态,可以安全调用 Laravel 的 restore();如果查不到结果,可能是真被删了,也可能是 deleted_at 是 NULL(即根本没删过)。
- 不要只查
id = 123就认为它“存在”,得明确带上deleted_at IS NOT NULL - 某些项目会把
deleted_at设为INT类型存时间戳,此时条件要改成deleted_at > 0,但 Laravel 默认用TIMESTAMP,所以优先按IS NOT NULL查
注意 phpMyAdmin 的显示限制和排序干扰
phpMyAdmin 浏览页签默认按主键升序排列,而软删除记录往往集中在老数据里,容易滑过去。更麻烦的是,它默认只显示前 30 行,如果你没翻页或改分页数,很可能根本看不到它们。
- 在浏览页签右上角把“显示”下拉框从
30改成All,再配合顶部搜索栏输入IS NOT NULL(部分版本支持),能快速定位 - 点击
deleted_at列头排序,NULL值通常排在最前或最后,非NULL时间戳会聚在一起,方便肉眼扫视 - 如果你开了 phpMyAdmin 的“启用列选择”,记得勾上
deleted_at,否则这列压根不显示,你连判断依据都没有
软删除的数据不是消失了,只是被 SQL 条件悄悄过滤掉了——关键永远在 deleted_at 字段的值和你的查询是否显式覆盖它。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











