Laravel Eloquent 检索带有 JSON 列的行

Nom*_*omi 6 php json laravel eloquent

我的表中有以下数据

桌子:

id    |name   | option_data

1     |Joe    |{"gender":"Male","cnic":"1234567","dob":"2016-03-14"}     
2     |Doe    |{"gender":"Male","cnic":"9999","dob":"2016-03-14"}     
Run Code Online (Sandbox Code Playgroud)

如何以正确的 json_encode 格式获取数据。

例如,如果我写

echo json_encode($app->auth->users);
Run Code Online (Sandbox Code Playgroud)

我的 option_data 输出

option_data":"{\"gender\":\"Male\",\"cnic\":\"61101-6859110-3\",\"dob\":\"2016-03-14\"}"
Run Code Online (Sandbox Code Playgroud)

我的数据库列类型是Text. 如果我删除所有\使用stripslashes 仍然数据不是有效的JSON,因为它包裹在 "双引号中。

如何使用所有其他库以正确的 json_encode 格式获取数据。

小智 11

您可以在模型中使用 $casts 变量,它会自动转换为 json 并反转为数组。

protected $casts = [
     "option_data" => "array"
];
Run Code Online (Sandbox Code Playgroud)


Jos*_*jas 5

尝试在模型和数据模型中使用访问器

public function getOptionDataAttribute($value)
{
    return json_decode($value);
}
Run Code Online (Sandbox Code Playgroud)

并返回到你的控制器中:

return Model::all(); //What you need to retrieve 
Run Code Online (Sandbox Code Playgroud)

输出必须是:

{
    id: 1
    name: name,
    option_data: {"gender":"Male","cnic":"1234567","dob":"2016-03-14"}
}
Run Code Online (Sandbox Code Playgroud)