2017-06-01 39 views
2

我試圖提交一個DB:raw()查詢,來測試MySQL CAST()函數。Laravel 5.4 - 「DB:raw()」使用MySQL「CAST()」函數

Model包含:

class User extend Model 
{ 
    public static function myMethodDate() 
    { 
     $var = DB::select(
        DB::raw("SELECT CAST('2017-05-24 13:38:35.471001' AS DATETIME(3)) AS arrival_time") 
       ); 
     dd($var[0]->arrival_time); 
    } 
} 

當我打電話的myMethodDate()方法,它返回:

"2017-05-24 13:38:35" 

,但如果我在MySQL shell中運行它:

mysql> 
mysql> SELECT CAST('2017-05-24 13:38:35.471001' AS DATETIME(3)) AS arrival_time; 
+-------------------------+ 
| arrival_time   | 
+-------------------------+ 
| 2017-05-24 13:38:35.471 | 
+-------------------------+ 
1 row in set (0.00 sec) 

mysql> 

與「毫秒」。

爲什麼Laravel DB:raw()查詢不報告MySQL CAST()輸出?

謝謝。

回答

0

OK,我找到了解決檢索「原樣」 MySQL的CAST()輸出:

class User extend Model 
{ 
    public static function myMethodDate() 
    { 
     $var = DB::select(
        DB::raw("SELECT CONVERT(CAST('2017-05-24 13:38:35.471001' AS DATETIME(3)), CHAR) AS arrival_time") 
       ); 
     dd($var[0]->arrival_time); 
    } 
} 

現在出來,正確的,是"2017-05-24 13:38:35.471"

1

這不是DB:raw()方法,它是如何處理DateTimephp。如果您對DateTimeformat(),你應該能夠得到微秒:

dd($var[0]->arrival_time->format('Y-m-d H:i:s.u')); 
+0

我不能得到MySQL的輸出「原樣」,沒有使用格式()? – vlauciani

+0

在內部,'php'使用格式('Ymd H:i:s')'當您將其轉換爲字符串時 – JRLambert

+0

我再次測試並運行DB :: select(DB :: raw(「SELECT'2017- 05-24 13:38:36.471001'AS arrival_time「));'正確返回'」2017-05-24 13:38:36.471001「'。我認爲問題在於MySQL'CAST()'函數。 – vlauciani