我想暂时尝试Laravel,所以我花了整个下午设置它。
在Windows上我安装了:WAMP 32位PHP 5.4,SQL Server 3.0驱动程序来自Microsoft(这就是我使用WAMP 32位的原因)和Composer。
然后我创建了一个项目,下载Laravel和生成器。我创建了一个脚手架来查看它生成的代码类型并对其进行测试。
由于nvarchar到datetime转换错误,我的第一个“创建”操作失败。我在SQL Server Management Studio(SSMS)中粘贴了查询,并以相同的结果激活它。
错误来自日期格式。 Laravel这样说:“2013-12-17 16:55:124”。但在请求之前,它会向SQL Server发送一些设置,其中一个非常有趣:
set dateformat dmy
对我来说set dateformat dmy
意味着它需要这样的日期:
“17-12-2013 16:55:124”
在SSMS中将set dateformat更改为:
set dateformat ymd
或更改请求中的日期格式使其有效。
我不认为这是一个错误。我只是觉得有些东西是错误配置的。我只是不知道是什么。
答案 0 :(得分:1)
我终于找到了一种方式,看起来很干净。诀窍是强制Laravel使用datetime2
而不是datetime
与SQL Server。
为了做到这一点,你需要做这些改变:
在Illuminate / Database / Schema / Grammars / SqlServerGrammar.php中
protected function typeDateTime(Fluent $column)
{
return 'datetime'; // Change to datetime2
}
和
protected function typeTimestamp(Fluent $column)
{
return 'datetime'; // Change to datetime2
}
然后在Illuminate / Database / Query / Grammars / SqlServerGrammar.php中:
public function getDateFormat()
{
return 'Y-m-d H:i:s.000'; // change to 'Y-m-d H:i:s.0000000'
}
我希望它有助于某人...
答案 1 :(得分:0)
我使用DB :: raw wit SQL修复了datetime的服务器特定语法。
public function datetime() {
$addDate = DB::insert("insert into TABLE (date) values (convert(date,'$date',127))");
}
我不确切知道它为什么会发生,但与经典Laravel DB语法相同的函数返回SQLSTATE [22007]。
public function datetime() {
$addDate = DB::table('TABLE')
->insert([
'date'=> $date]);
// return SQLSTATE[22007]
}