Laravel-如何使用原始数据库将VARCHAR转换为TIMESTAMP或DATETIME
我正在使用Laravel5.8从提供给我的表中运行查询。我注意到其中一个字段(在创建时)是varchar,而不是timestamp或datetime。 请注意,在我的情况下,我不能更改表格Laravel-如何使用原始数据库将VARCHAR转换为TIMESTAMP或DATETIME,laravel,Laravel,我正在使用Laravel5.8从提供给我的表中运行查询。我注意到其中一个字段(在创建时)是varchar,而不是timestamp或datetime。 请注意,在我的情况下,我不能更改表格 $winners=DB::table('winner')) ->选择('msisdn','created_at') ->orderByRaw('created_at DESC') ->get(); 我使用的是DB Raw 根据我的查询,请告诉我如何将在(varchar)创建的转换为时间戳或日期时间 谢谢你,
$winners=DB::table('winner'))
->选择('msisdn','created_at')
->orderByRaw('created_at DESC')
->get();
我使用的是DB Raw
根据我的查询,请告诉我如何将在(varchar)创建的转换为时间戳或日期时间
谢谢你,你可以使用碳,这已经被列为Laravel的一个依赖项:
$winner->map(静态函数($winner){
$winner['created_at']=\Carbon\Carbon::parse($winner['created_at']);
返回$winner;
});
但是请注意,Carbon::parse()可能不是这里的最佳选项,传递有效格式更好Carbon::createFromFormat(…)
最好的方法是使用
在您的Winner
模型中,将访问者应用为:
public function getCreatedAtAttribute($date)
{
return \Carbon\Carbon::parse($date);
}
这样,您就不需要在获取结果后循环查看它。此外,您可能会在多个控制器中获取winners,这样创建的_at将始终作为时间戳出现,因此您不必担心它,每次获取winners后都要编写一些代码
我认为这是显而易见的,但因为我投了反对票。请注意,在定义访问器后使用模型,如下所示:
$winners = \App\Winner::select('msisdn', 'created_at')
->orderByRaw('created_at DESC')
->get();
使用SQL的CAST
函数,如下所示
$winners=DB::表格('winner')
->选择('msisdn',DB::raw('CAST(在日期时创建)'))
->orderByRaw('created_at DESC')
->get();
其可能的重复不是重复,OP是询问如何将Db中的字段直接转换为时间戳,而不是如何将PHP中的普通日期字符串转换为时间戳,其不同之处在于使用Db Raw,这意味着他将获得一个stdClass实例,而不是Winner模型instance@JoaquinMarcher,我觉得很明显,在现在的回答中提到了这一点,它将只强制转换到最新版本,并释放时间部分。没有测试过它,但是它会返回一个PHP\DateTime吗?是的。会的。如果您遇到任何问题,请随时试用,并告诉我。我认为DB::raw('DATETIME(created_at')
也可以接受。使用raw DB
提问。