Laravel 5.4 - “DB:raw()”使用MySQL“CAST()”函数

时间:2017-06-01 14:58:08

标签: php 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()输出?

谢谢。

2 个答案:

答案 0 :(得分:1)

这不是DB:raw()方法,而是php处理DateTime的方式。如果您在format()上致电DateTime,您应该可以获得微秒:

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

答案 1 :(得分:0)

好的,我找到了解决方案来检索“原样”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"