如何在laravel中将数组中属性的JSON字符串值返回为JSON数组

Anw*_*lam 2 php laravel

我将 JSON 字符串存储在 MySQL 表的一列中。当我尝试通过 API 将该列数据作为 php/json 数组返回时,它仍然是一个字符串。

这是我的代码,它返回一个问题数组,在每个问题对象中,我都将 options 数组作为 JSON stringify。但是,当它返回时,我不希望选项被字符串化。

    public function getQuestions($id, Request $request)
    {
        // return $id;

        $questions = Question::where('quiz_id', $id)->orderByRaw("RAND()")->get();
        $questions->makeHidden(['ans']);
        // $questions->toJson(['options']);

        // $questions['options'] = json_encode(questions['options']);
        return $questions;
    }
Run Code Online (Sandbox Code Playgroud)

它像这样返回。

[
    {
        "id": 100000008,
        "quiz_id": 10000,
        "title": "??? ??????? ?????",
        "options": "[\"????\",\"????\",\"????\",\"????\"]",
        "answer": 1
    },
    {
        "id": 100000009,
        "quiz_id": 10000,
        "title": "??? ??????? ?????",
        "options": "[\"???\",\"????\",\"??\",\"????? ??\"]",
        "answer": 2
    }
]
Run Code Online (Sandbox Code Playgroud)

但我想要这样:

[
    {
        "id": 100000008,
        "quiz_id": 10000,
        "title": "??? ??????? ?????",
        "options": ["????","????","????","????"],
        "answer": 1
    },
    {
        "id": 100000009,
        "quiz_id": 10000,
        "title": "??? ??????? ?????",
        "options": ["???","????","??","????? ??"],
        "answer": 2
    }
]
Run Code Online (Sandbox Code Playgroud)

Anw*_*lam 5

我刚刚添加了 $casts 将字符串转换为数组

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Question extends Model
{
    protected $table = 'question';

    protected $fillable = [
        'quiz_id',
        'title',
        'opt1',
        'opt2',
        'opt3',
        'opt4',
        'ans',
        'options',
        'answer'
    ];

    protected $casts = [
        'options' => 'array',
    ];

    public function quiz()
    {
        return $this->belongsTo('App\Quize', 'quiz_id' , 'id');
    }
}
Run Code Online (Sandbox Code Playgroud)