2017-04-11 18 views
1

私はテーブルに格納されているMySQLデータベース内の列(META_DATA)に保存されているJSONフォーマットされた文字列は、それが例えばこのようなものになります持っている:私があれば今すぐJSON文字列

{"Format":"JPEG","Geometry":"3216x2136","size":{"width":3216,"height":2136}} 

を次のコマンドを使用します。

$meta_data = DB::query->get(); 
return $meta_data; 

私が手:

[ 
    { 
    "meta_data": "{\"Format\":\"JPEG\",\"Geometry\":\"3216x2136\",\"size\":{\"width\":3216,\"height\":2136} 
    } 
] 

私が使用している場合、私も同じ結果を得る:

$meta_data = json_decode(DB::query->get()); 
return $meta_data; 

同様に、response() - > json($ meta_data);を使用します。それを文字列として返します。

それがダウンして次のステップに行く必要があると私には思えるが、私は理想的である、私が後だものに近い何かを得ることができていない:

[ 
    { 
    "meta_data": 
    { 
     "Format":"JPEG", 
     "Geometry":"3216x2136", 
     "size": 
     { 
     "width":3216, 
     "height":2136 
    } 
    } 
    } 
] 
+0

は、アレイにjosnを変更したいのですか?あなたはどうしていますか? –

答えて

1

DB::query->get()が返されますstdClassオブジェクトの配列(queryはクエリ条件の省略形です)。配列をループし、各エントリのmeta_dataフィールドをjsonオブジェクトに手動で変換する必要があります。

$records = DB::query->get(); 

foreach ($records as $record) { 
    $record->meta_data = json_decode($record->meta_data); 
} 

return $records; 

別のオプションは、テーブルのためのモデルを作成し、自動的にJSONにキャストする$castsプロパティにmeta_dataフィールドを追加することです。

モデル:

class Attachment extends Model 
{ 
    protected $casts = [ 
     'meta_data' => 'json', 
    ]; 
} 

コントローラー:

// assume "query" is shorthand for your query conditions 
$records = Attachment::query->get(); 

return $records;