You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel模型自动硬删除需求:软删除30天后自动彻底删除

实现Laravel软删除记录自动硬删除(30天后)

嘿,既然你已经搞定了软删除、恢复和手动硬删除的功能,那给你加上自动清理30天前软删记录的机制就很简单啦,咱们分几步来:

1. 创建自定义Artisan命令

首先咱们需要一个专门的命令来处理过期软删记录的清理:

php artisan make:command PruneSoftDeletedUsers

这个命令会在app/Console/Commands目录下生成一个PruneSoftDeletedUsers.php文件,咱们修改它的handle方法:

<?php

namespace App\Console\Commands;

use App\Models\User;
use Illuminate\Console\Command;

class PruneSoftDeletedUsers extends Command
{
    protected $signature = 'users:prune-soft-deleted';
    protected $description = '永久删除30天前被软删除的用户';

    public function handle()
    {
        $prunedCount = User::onlyTrashed()
            ->where('deleted_at', '<=', now()->subDays(30))
            ->forceDelete()
            ->count();

        $this->info("成功永久删除 {$prunedCount} 个过期软删用户");
    }
}

这里用onlyTrashed()只查询软删的记录,然后筛选出deleted_at早于30天前的,最后用forceDelete()执行硬删除,还统计了删除数量方便日志查看。

2. 配置任务调度

接下来要让Laravel自动执行这个命令,打开app/Console/Kernel.php,在schedule方法里添加调度规则:

protected function schedule(Schedule $schedule)
{
    // 其他调度任务...
    
    // 每天凌晨2点执行一次清理命令
    $schedule->command('users:prune-soft-deleted')->dailyAt('02:00');
}

你可以根据需求调整执行频率,比如->daily()(每天任意时间)、->weekly()(每周一次)都可以。

3. 测试与部署

  • 本地测试:直接运行php artisan users:prune-soft-deleted,看看是不是能正确删除符合条件的记录。
  • 服务器部署:别忘了在服务器上配置Cron,让Laravel的调度器能定时运行,只需要在Cron里添加一行:
* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1

这样一来,系统就会自动帮你清理30天前的软删用户啦,不用再担心管理员忘记手动处理~

内容的提问来源于stack exchange,提问作者mafortis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:14:50