laravel auto hard delete

laravel auto hard delete

问题描述:

I have methods where i can soft delete my model, restore them and hard delete (wipe from database) theme,

So far everything is ok, what I want in additional to that is to hard delete after 30 days passed from soft delete info, so in that way even if admin forget to hard delete models it will delete automatically after 30 days.

Here is my codes:

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.');
    }

Question

  1. what should i add to my hard delete function in order to delete my model after 30 days of deleted_at column data?

Update

I've tried schedule way and as i cannot use cron job to test it so i used php artisan schedule:run and here is the result I've got:

screen1

我有方法可以软删除 code>我的模型, restore 代码>他们和硬删除 code>(从数据库中删除)主题, p>

到目前为止一切正常,我想要的除此之外是在 30天 code>从 soft delete code> info传递,所以即使管理员忘记了硬删除模型,它也会在30天后自动删除。 p> 这是我的代码: p>

soft delete code> p>

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

restore code> p>

  public function restore($ id)
 {
 $ user = User :: onlyTrashed()  - > where('id',$ id) - > restore(); 
  // Mail :: to($ user-> email) - > send(new adminrestoreduser($ user)); 
返回redirect() - > route('users.index') - > with(' 成功','用户成功恢复。';; 
} 
  code>  pre> 
 
 

hard delete code> p>

  public function forcedelete($ id)
 {
 $ user = User :: where('id',$ id) - > forcedelete(); 
 Storage :: delete($ user-> 图像); 
返回redirect() - > route('users.index') - > with('success','User Permanently deleted。'); 
} 
  code>  pre>  
 
 

问题 h3>
  1. 我应该在 hard delete code>函数中添加什么才能在30天后删除我的 model deleted_at code>列数据? li> ol>

    更新 h1>

    我已尝试安排方式和我一样 不能使用cron作业来测试它所以我使用 php artisan schedule:run code>,这是我得到的结果: p>

    p> div>

Use the Task Scheduler to automatically run a command:

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();
}