2013-12-17 70 views
0

我想嘗試Laravel一段時間,所以我花了下午設置它。pdo_sqlsrv和日期格式與Laravel

在Windows上我安裝了:WAMP 32位PHP 5.4,SQL Server來自Microsoft的3.0驅動程序(這就是爲什麼我使用WAMP 32位)和Composer。

然後我創建了一個項目,下載Laravel和生成器。我創建了一個腳手架來查看它生成的代碼並對其進行測試。

我的第一個「創建」操作失敗,因爲nvarchar to datetime轉換錯誤。我將查詢粘貼到SQL Server Management Studio(SSMS)中,並以相同的結果將其解鎖。

錯誤來自日期格式。 Laravel這樣說:「2013-12-17 16:55:124」。但請求之前,它會發送一些設置爲SQL  服務器,以及一個很有意思:

set dateformat dmy 

要我set dateformat dmy表示,預計這樣的日期: 「17-12-2013 16:55:124 「

在SSMS改變設定的日期格式到:

set dateformat ymd 

或更改日期格式的要求使得它的工作原理。

我不認爲這是一個錯誤。我只是認爲有些配置錯誤。我只是不知道是什麼。

回答

1

我終於找到了一種方式,似乎很乾淨。訣竅是強制Laravel使用datetime2而不是datetime與SQL  服務器。

爲了做到這一點,你需要做這些改變:

在照亮/數據庫/模式/文法/ SqlServerGrammar.php

protected function typeDateTime(Fluent $column) 
{ 
    return 'datetime'; // Change to datetime2 
} 

而且

protected function typeTimestamp(Fluent $column) 
{ 
    return 'datetime'; // Change to datetime2 
} 
在照亮

然後/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' 
} 

我希望它可以幫助別人...

+0

更改包裝看起來很錯誤的... –

+0

你好,我同意你的看法,但我的答案是4歲和問題是在Laravel 4.另外,我做了一個laravel PR所以它得到了以前固定的時間長 – elfif

0

我使用DB :: raw wit SQL的服務器特定的日期時間語法修復了它。

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] 
}