2017-11-14 2 views
0

MySQL 5.7 테이블에서 datetime(6) 필드를 검색하는 동안 문제가 발생했습니다. 내가 MySQL의 클라이언트에서 직접 실행하는 경우 , 그것은 작동합니다Laravel 5.5 - Eloquent - "datetime (6)"필드가있는 MySQL 테이블에서 "마이크로 초"검색

mysql> SELECT arrival from table1 limit 1; 
+----------------------------+ 
| arrival     | 
+----------------------------+ 
| 2016-06-22 16:52:06.260000 | 
+----------------------------+ 
1 row in set (0.00 sec) 

mysql> 

하지만 설득력을 사용 Laravel에서 필드를 받고, 마이크로 초는보고되지 않습니다 :

class Table1Model extends Model 
{ 
    protected $table = 'table1'; 
} 

class Table1Controller extends Controller 
{ 
    public function index() 
    { 
     $data = Table1Model::first()->arrival; 
     dd($data); 
    } 
} 

// the output is: "2016-06-22 16:52:06" 

이이 설득력 문제인가? 마이크로 초는 어떻게됩니까?

감사합니다.

+0

시도가'보호를 추가하는 $ 날짜 = [ "도착", "created_at", "updated_at은"]'(당신은 또한 다른 2를 가정) 및 카본이 올바르게 정화되는지보십시오. – apokryfos

+0

@apokryfos 고맙습니다. 그러나 이것은 작동하지 않습니다. 출력은 동일합니다 ... – vlauciani

+0

[이 버그 신고] (https://bugs.php.net/bug.php?id=54648)와 관련이 있습니다. PDO가 부분 날짜 시간을 지원하지 않는 것으로 보입니다. 이 문제는 해결 된 것으로 보이지만 해결 된 버전을 알 수 없습니다. [이 답변] (https://stackoverflow.com/a/31930762/487813)은 해결 방법이있을 수 있습니다. – apokryfos

답변

0

감사합니다. @apokryfos, true ... 이것은 버그입니다.

내가 RAW 쿼리를 사용하여 간단한 해결 방법 발견

class Table1Model extends Model 
{ 
    protected $table = 'table1'; 
} 

class Table1Controller extends Controller 
{ 
    public function index() 
    { 
     $query = Table1Model::select(
      DB::raw(
        CONVERT(CAST(arrival AS DATETIME(3)), CHAR) 
      ) 
     ); 
     $data = $query->get(); 
     dd($data); 
    } 
} 
// the output is: "2016-06-22 16:52:06.260"