web-dev-qa-db-fra.com

Laravel: Comment stocker des données au format json dans la base de données?

Je veux stocker des données au format json dans la base de données d'un tableau donné. Mais comment je le stocke en utilisant le contrôleur.

Supposons que j'ai des données json comme:

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

Autant que je sache dans le contrôleur utilisant le format json, c'est comme ça car je n'en suis pas pleinement conscient.

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');
        }

Comment puis-je l'enregistrer dans mySQL uniquement la liste des divisions dans Division Model en utilisant Laravel Controller?

11
Hola

Vous n'avez pas besoin de convertir les données du tableau en chaîne JSON vous-même, utilisez le paramètre Laravel $ cast sur votre modèle: https://laravel.com/docs/5.2/eloquent-mutators # attribut-casting

Vous devriez faire quelque chose comme ça dans votre modèle Div:

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

Vous pouvez convertir votre modèle au format JSON comme $model->toJson();

ou

si vous avez des données dans un tableau, vous pouvez utiliser json_encode(['id' => 1, 'name' => 'User 1']);

Le schéma Laravel prend également en charge les types de champs JSON. https://laravel.com/docs/5.0/schema#adding-columns

Vous pouvez également utiliser le type de champ text pour stocker les données JSON.

3
bbdangar

Définissez votre modèle

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

Voici le code complet.

/**
     * 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