提问者:小点点

Laravel MySQL按created_at排序和删除


我对Laravel还是个新手,所以请原谅我要问一些很明显的问题。

我有一个使用Eloquent迭代的数据库,我需要删除数据库中超过30天的所有内容,我显然做错了什么。

$dataArr = Data::orderBy('created_at', 'asc');
    foreach($dataArr as $data){
        if($data['created_at'] < strtotime('-30 days')){
            $data->delete();
        }else{
            break;
        }
    }

代码似乎根本没有进入循环,我也不太明白如何完成这个任务


共1个答案

匿名用户

现在,$dataarr是查询构建器,而不是结果,因为您从不使用->get()

$dataArr = Data::orderBy('created_at', 'asc')->get(); // now contains all of the records

然而,有一种更简单的方法可以删除记录,而无需逐个检查。

DB::table('data_table')
    ->where('created_at', '<', 
            Carbon::now()->subDays(30)->toDateTimeString())
    ->delete();