Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel-如何使用原始数据库将VARCHAR转换为TIMESTAMP或DATETIME_Laravel - Fatal编程技术网

Laravel-如何使用原始数据库将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)创建的转换为时间戳或日期时间 谢谢你,

我正在使用Laravel5.8从提供给我的表中运行查询。我注意到其中一个字段(在创建时)是varchar,而不是timestamp或datetime。 请注意,在我的情况下,我不能更改表格

$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
提问。