2016-02-23 133 views
2

我得到了一個運行在mysql 5.7.11上的數據庫,並將大量數據放入一個JSON列的表中。我有一個像這樣的原始查詢。Laravel mysql json數據選擇

select * from `note` 
where `note_structure_id` = 3 
and JSON_EXTRACT(LCASE(data), '$._letter') = 'a' 
and JSON_EXTRACT(data, '$._number') = 1 

在sequel pro或phpmyadmin中運行,它給了我一個結果,我期望;

{"_letter": "A", "_number": 1} 

我用laravel構建的相同查詢給了我一無所獲的結果。一個空陣列。我的代碼構建相同的查詢我得到了這種類型的代碼。

$result = \DB::table('note')->where('note_structure_id', $structureId); 

if(is_array($query)) { 
    if(isset($query['where'])) { 
     foreach($query['where'] AS $field => $value) { 
      if(is_numeric($value)) { 
       $result = $result->where(\DB::raw("JSON_EXTRACT(data, '$._{$field}')"), '=', $value); 
      } 
      else { 
       $result = $result->where(\DB::raw("JSON_EXTRACT(LCASE(data), '$._{$field}')"), '=', strtolower($value)); 
      } 
     } 
    } 
} 

dd($result->get()); 

有沒有人知道我做錯了我的代碼什麼的。我嘗試了一切可能的修復方法,但沒有結果。

謝謝!

+0

研究它之後來到一個結論,我需要添加JSON_UNQUOTE()圍繞JSON_EXTRACT(),它就像一個魅力! –

回答

1

看到你修正了它,但爲什麼不只是以更傳統的方式做爲原始查詢。您的代碼目前不太易讀。

$results = DB::select('select * from `note` where `note_structure_id` = :id and JSON_EXTRACT(LCASE(data), `$._letter`) = :a and JSON_EXTRACT(data, `$._number`) = :number', ['id' => 3, 'a' => 'a', 'number' => 1]);