laravel auto hard delete

时间:2018-04-28 05:11:00

标签: php laravel

我有方法可以soft delete我的模型,restore他们和hard delete(从数据库擦除)主题,

到目前为止一切正常,我想要的除了30 dayssoft delete信息传递后硬删除,所以这样即使管理员忘记硬删除模型它也会删除30天后自动。

这是我的代码:

soft delete

public function destroy($id)
    {
        $user = User::findOrFail($id);
        $user->delete();
        Mail::to($user->email)->send(new adminsoftdeleteduser($user));
        return redirect()->route('users.index')->with('success', 'User successfully deleted.');
    }

restore

public function restore($id)
    {
        $user = User::onlyTrashed()->where('id', $id)->restore();
        // Mail::to($user->email)->send(new adminrestoreduser($user));
        return redirect()->route('users.index')->with('success', 'User successfully restored.');
    }

hard delete

public function forcedelete($id)
    {
        $user = User::where('id', $id)->forcedelete();
        Storage::delete($user->image);
        return redirect()->route('users.index')->with('success', 'User Permanently deleted.');
    }

问题

  1. 我应该添加到我的hard delete函数中以删除我的 deleted_at列数据30天后的模型?
  2. 更新

    我已经尝试了计划方式,因为我不能使用cron作业来测试它,所以我使用了php artisan schedule:run,这是我得到的结果:

    screen1

1 个答案:

答案 0 :(得分:4)

使用Task Scheduler自动运行命令:

protected function schedule(Schedule $schedule)
{
    $schedule->call(function () {
        $users = User::whereNotNull('deleted_at')->where(
            'deleted_at', '<=', now()->subDays(30)->toDateTimeString()
        )->get();

        $users->each->forceDelete();
    })->daily();
}