我想创建一个cron作业,在Laravel中触发任务/命令,删除所有1周大的记录。我正在尝试使用ExpressiveDate来帮助我评估时间。 Laravel最好的办法是什么?
我已注册命令:
Artisan::add(new removeWeek);
在/ apps /命令下创建了一个removeWeek.php命令,工作正常。我正在寻找最好的语法 - 一种雄辩的方式 - 遍历我的记录,只删除当前一周的记录。 cron作业每天运行一次。
答案 0 :(得分:2)
看起来你已经完成所有设置,所以现在你必须
Calendar::where('created_at', '<', \Carbon\Carbon::now()->subWeek())->delete();
最后一件事:类名通常是大写的:
class RemoveWeek() {
}
答案 1 :(得分:0)
laravel 定期删除记录的方法是使用特征 Illuminate\Database\Eloquent\Prunable
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Prunable;
class Post extends Model
{
use Prunable;
/**
* Get the prunable model query.
*
* @return \Illuminate\Database\Eloquent\Builder
*/
public function prunable()
{
return static::where('created_at', '<=', now()-> subWeek());
}
}
然后运行命令:
php artisan model:prune
当然,您可以安排 model:prune
artisan 命令定期运行
这里是文档的链接: https://laravel.com/docs/8.x/eloquent#pruning-models