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
- what should i add to my
hard delete
function in order to delete my model after 30 days ofdeleted_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:
我有方法可以 到目前为止一切正常,我想要的除此之外是在 30天 code>从 软删除 code>我的模型,
restore 代码>他们和
硬删除 code>(从数据库中删除)主题, p>
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>
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();
}