为宠物用户表(PetUser)增加软删除功能,使得删除的宠物记录不会从数据库中物理删除,而是通过deleted_at字段标记为已删除状态。
文件:app/Module/Pet/Models/PetUser.php
use Illuminate\Database\Eloquent\SoftDeletes; 引用use SoftDeletes; trait@property \Carbon\Carbon $deleted_at 删除时间'deleted_at' => 'datetime'文件:app/Module/Pet/Databases/GenerateSql/pet_users.sql
deleted_at 字段定义timestamp NULL DEFAULT NULL COMMENT '删除时间'文件:app/Module/Pet/Databases/AddSoftDeletesToPetUsers.sql
数据库迁移文件:database/migrations/2025_06_07_113048_add_soft_deletes_to_pet_users_table.php
文件:app/Module/Pet/AdminControllers/PetUserController.php
deleted_at 列显示deleted_at 字段显示trashed 作用域:只显示已删除的记录with_trashed 作用域:显示包含已删除的所有记录文件:app/Module/Pet/Tests/PetUserSoftDeleteTest.php
由于数据库迁移被禁用,手动执行了以下SQL语句:
-- 添加 deleted_at 字段
ALTER TABLE `kku_pet_users`
ADD COLUMN `deleted_at` timestamp NULL DEFAULT NULL COMMENT '删除时间' AFTER `updated_at`;
-- 为 deleted_at 字段添加索引
ALTER TABLE `kku_pet_users`
ADD INDEX `idx_deleted_at` (`deleted_at`);
通过创建测试命令验证了软删除功能的完整性:
=== 宠物软删除功能测试 ===
1. 创建测试宠物...
✓ 创建成功,宠物ID: 15
2. 验证宠物存在...
✓ 宠物存在,名称: 软删除测试宠物
✓ deleted_at: null
✓ trashed(): false
3. 软删除宠物...
✓ 软删除完成
4. 验证软删除后的状态...
✓ 正常查询找不到宠物(符合预期)
5. 使用withTrashed查询...
✓ withTrashed可以找到宠物
✓ deleted_at: 2025-06-07 11:35:39
✓ trashed(): true
6. 使用onlyTrashed查询...
✓ 找到 1 个已删除的宠物
7. 恢复宠物...
✓ 恢复完成
8. 验证恢复后的状态...
✓ 宠物已恢复,deleted_at: null
✓ trashed(): false
9. 强制删除宠物...
✓ 强制删除完成
10. 验证强制删除后的状态...
✓ 强制删除成功,宠物完全删除
// 软删除
$pet->delete();
// 恢复
$pet->restore();
// 强制删除(物理删除)
$pet->forceDelete();
// 检查是否已删除
$pet->trashed();
// 默认查询(不包含已删除)
PetUser::all();
// 包含已删除的记录
PetUser::withTrashed()->get();
// 只查询已删除的记录
PetUser::onlyTrashed()->get();
为PetUser表增加软删除功能
- 在PetUser模型中添加SoftDeletes trait和deleted_at字段
- 更新模型的field注释块和casts数组,包含deleted_at字段
- 创建数据库迁移文件添加deleted_at字段和索引
- 更新SQL生成文件包含deleted_at字段定义
- 为后台管理添加软删除支持,包括deleted_at列显示和筛选功能
- 创建完整的软删除测试用例,验证软删除、恢复和强制删除功能
- 手动执行SQL添加deleted_at字段到数据库表
- 通过测试验证软删除功能完全正常工作