2017-12-03 131 views
3

此代碼:Laravel雄辯JSON領域,選擇屬性產生額外的雙引號

$translation = Translation::where('language_id', 2) 
      ->whereNotNull('data->navigation_login') 
      ->select('data->navigation_login as navigation_login') 
      ->first() 
      ->toArray(); 
dd($translation); 

產生這樣的結果: array(1) {["navigation_login"]=> string(7) ""Login"" }

的問題是多餘的雙引號角落找尋登錄字符串:""Login""

我該如何消除這種情況?

如果我運行aboe代碼而不選擇:

$translation = Translation::where('language_id', 2) 
      ->whereNotNull('data->navigation_login') 
      ->first() 
      ->toArray(); 
dd($translation); 

沒有雙引號:

["data"]=> 
    array(3) { 
    ["navigation_login"]=> 
    string(5) "Login" 
    ["navigation_order"]=> 
    string(5) "Order" 
    ["navigation_registration"]=> 
    string(7) "Sign up" 
    } 

這裏是模型細節:

... 
class Translation extends Model { 

    protected $casts = [ 
     'data' => 'array', 
    ]; 
... 

這裏是架構細節:

... 
$table->json('data')->nullable(); 
... 
+0

燦你把點而不是 - >在data-> navigation_login這一行? – DrStein

+0

Translation模型的表是否真的叫做'data'?你能否在表格模式中包含一些信息? –

+0

@DrStein' - > select('data.navigation_login as navigation_login')'點不起作用。 **未知列'data.navigation_login'** – robcaa

回答

0

最後的解決方案:

的MySQL 5.7.13,後來

Using the unquoting extraction operator - >> ->select('data->>navigation_login as navigation_login')

或更舊版本的MySQL 5.7 < MYSQL < 5.7.13 ->select(\DB::raw("JSON_UNQUOTE(JSON_EXTRACT(data, '$.navigation_login')) as navigation_login"))