web-dev-qa-db-ja.com

Laravel:データベースにJSON形式のデータを保存する方法は?

特定の配列からいくつかのjson形式のデータをデータベースに保存したい。しかし、私はコントローラを使用してそれを保存する方法。

次のようなjsonデータがあるとします。

{"id":"bangladesh","divisions":[{"name":"Barisal"},{"name":"Chittagong"},{"name":"Dhaka"},{"name":"Khulna"},{"name":"Rajshahi"},{"name":"Rangpur"},{"name":"Sylhet"}]}

私がコントローラで知っている限りでは、json形式を使用すると、私はそれを完全に認識していないため、このようになります。

public function saveUser(Request $request)
        {
            $div=new Div();
                       $user->json = json_encode( array({"Date 1": {
                 {"id":"bangladesh","divisions":[{"name":"Barisal"},{"name":"Chittagong"},{"name":"Dhaka"},{"name":"Khulna"},{"name":"Rajshahi"},{"name":"Rangpur"},{"name":"Sylhet"}]}   
            $div->save();

            return redirect('getList');
        }

Laravel Controllerを使用して、部門モデルの部門リストのみをmySQLに保存するにはどうすればよいですか?

11
Hola

自分で配列データをJSON文字列に変換する必要はありません。モデルでLaravel $ castsパラメーターを使用してください: https://laravel.com/docs/5.2/eloquent-mutators#attribute-casting

Divモデルで次のようにする必要があります。

protected $casts = [
    'divisions' => 'array',
];
8
delatbabel

モデルを$model->toJson();のようなJSON形式に変換できます

または

配列にデータがある場合は、json_encode(['id' => 1, 'name' => 'User 1']);を使用できます

LaravelスキーマはJSONフィールドタイプもサポートしています https://laravel.com/docs/5.0/schema#adding-columns

JSONデータを格納するためにtextフィールドタイプも使用できます。

3
bbdangar

モデルを設定する

protected $casts = [
        'list' => 'array'
    ];

完全なコードは次のとおりです。

/**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'primary_id', 
        'list'
    ];


    protected $casts = [
        'list' => 'array'
    ];

    public function setMetaAttribute($value)
    {
        $list = [];

        foreach ($value as $array_item) {
            if (!is_null($array_item['key'])) {
                $list[] = $array_item;
            }
        }

        $this->attributes['list'] = json_encode($list);
    }
0