我正在将L5.1.x中现有的项目迁移到运行Server 2012和SQL Server 2012的新服务器。
使用表的timestamps()字段时遇到一些问题。生病时加入我的方案:
$table->timestamps();
我得到带有“datetime”类型的created_at和updated_at列。
但是,当生病时尝试将模型添加到此数据库时,我会遇到该错误:
QueryException: Unable to convert an nvarchar Value to and datetime Value ....
生病时禁用模型中的时间戳字段,一切正常:
public $timestamps = false;
..但当然没有created_at和updated_at
的值我不知道导致这个问题的原因 - 任何想法?我可以手动将created_at和updated_at字段设置为“GETDATE()” - 但我想使用Laravels基本功能。
答案 0 :(得分:2)
Ok ill发现问题 - Laravel创建了一个格式为的日期时间:
"Y-m-d H:i:s.u"
但SQL Server需要以下格式:
"Y-d-m H:i:s"
因此,当您使用:
更新模型函数时public function fromDateTime($value)
{
return Carbon::parse(parent::fromDateTime($value))->format('Y-d-m H:i:s');
}
您可以将日期格式转换为SQL Server的正确值(不知道为什么它的Y-d-m,它不是我的服务器;)