Laravel eloquent JSON 字段,选择属性会产生额外的双引号

rob*_*caa 5 json laravel eloquent

这段代码:

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

产生这个结果: array(1) {["navigation_login"]=> string(7) ""Login"" }

问题是登录字符串周围的额外双引号: ""Login""

我怎样才能消除这种情况?

如果我在没有选择的情况下运行 aboe 代码:

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

没有双引号:

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

这是模型的详细信息:

...
class Translation extends Model {

    protected $casts = [
        'data' => 'array',
    ];
...
Run Code Online (Sandbox Code Playgroud)

这是架构详细信息:

...
$table->json('data')->nullable();
...
Run Code Online (Sandbox Code Playgroud)

rob*_*caa 4

最后给出解决方案:

MySQL 5.7.13 及更高版本

使用不带引号的提取运算符->> ->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"))