2016-08-10 4 views
1

MySql 5.7.14 및 laravel 5.2를 사용하고 있습니다. 이 같은
내 테이블 '사용자'JSON의 모양을Laravel 5.2 열에서 JSON 용 쿼리 작성

 
[{ 
    "id": "1", 
    "options": "{\"religion\": \"R'hllor, the Lord of Light\", \"favorite_color\": \"red\"}" 
}] 

난과 laravel를 통해 조회 :

SQLSTATE[HY000]: General error: 2036 (SQL: select * from `user` where `options`->"$.favorite_color" = red) 

$ii =\DB::table('user')->where('options->favorite_color', 'red')->get(); 

내가 오류에 직면하고 있는데 실행

SELECT * FROM `user` WHERE options->"$.favorite_color"='red' 
과 같은 검색어 phpmyadmin에서

의 오류가 발생하지 않았습니다. 누가 문제인지 알 수 있습니까? 미리 감사드립니다.

+0

도 참조 나를 위해 일한 버전을 수정하는 포인트 : http://stackoverflow.com/questions/33253778/php-pdo-query-error-on-table-has-json-data-type-mysql-5-7-8-rc –

+0

데이터가 테이블에 저장되는 방법, 특히 옵션 열을 표시 할 수 있습니까? – Qazi

+0

감사합니다. Mike. 그 링크를 통해 갈 것입니다. –

답변

7

나는 해결책을 얻었다. larvel 5.2를 사용하여 MySQL 5.7.8 이상에서 작업하려면 다음과 같이 config/database.php의 연결에 PDO 옵션을 추가해야합니다.

'mysql' => [ 
    'driver' => 'mysql', 
    'host'  => env('DB_HOST', 'localhost'), 
    'database' => env('DB_DATABASE', 'db_name'), 
    'username' => env('DB_USERNAME', 'root'), 
    'password' => env('DB_PASSWORD', ''), 
    'charset' => 'utf8', 
    'collation' => 'utf8_unicode_ci', 
    'prefix' => '', 
    'strict' => false, 
    'options' => array(
      PDO::ATTR_CASE => PDO::CASE_LOWER, 
      PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 
      PDO::ATTR_ORACLE_NULLS => PDO::NULL_NATURAL, 
      PDO::ATTR_STRINGIFY_FETCHES => true, 
      PDO::ATTR_EMULATE_PREPARES => true, 
     ), 

], 

그리고 php artisan config : cache를 실행하십시오. 잘 작동합니다. 공급 업체/laravel/프레임 워크/SRC/조명/데이터베이스/

protected $options = [ 
    PDO::ATTR_CASE => PDO::CASE_NATURAL, 
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 
    PDO::ATTR_ORACLE_NULLS => PDO::NULL_NATURAL, 
    PDO::ATTR_STRINGIFY_FETCHES => false, 
    PDO::ATTR_EMULATE_PREPARES => false, 
]; 

PDO는 :: & PDO :: ATTR_EMULATE_PREPARES이 database.php에 덮어 쓸 필요가있는 ATTR_STRINGIFY_FETCHES 같은 커넥터가/Connector.php PDO 옵션입니다.

+0

감사합니다. –

+0

매력처럼 작동합니다. –

+0

야! 너 freak'n 킥 엉덩이 :) 고마워. – tnylea

0

귀하의 PHP 버전을 확인하는 경우는 없습니다 7.0 또는 7.1

그런 다음이

sudo update-alternatives --set php /usr/bin/php7.1