我有一个数据库表,可以从API中获取一些信息。
列是
id datetime name
10011 2018-01-26 something
我正在寻找的是删除此条目,因为它现在的日期已经过去了。
有没有办法在Laravel中指定一个cron作业,它会自动删除该列 - 该列的条目为datetime
并且过去了?
答案 0 :(得分:5)
您可以使用2个组件实现此目标:artisan console command和task scheduling。
首先,我们将创建控制台命令:
php artisan make:command TruncateOldItems
$signature
定义为items:truncate
,并在$description
在handle
方法中,选择符合条件的所有项目,然后对其运行delete()
,例如:
public function handle()
{
Item::where('datetime', '<', Carbon::now())->each(function ($item) {
$item->delete();
});
}
然后我们安排命令:
App\Console\Kernel.php
在schedule
方法中,安排命令:
$schedule->command('items:truncate')->everyMinute();
Start the scheduler添加一个cron条目:
* * * * * php /path-to-your-project/artisan schedule:run >> /dev/null 2>&1
注意:您需要为模型更换Item
,并在命令类中包含模型和Carbon,其中use App\Item
和use Carbon\Carbon
位于顶部控制台命令类。