Besoin d'aide ?

Mise à jour de valeur présente dans un champ de type JSON

Avatar de sd35
sd35

Bonjour, petite question concernant l'update d'infos au format json dans une table. D'après la doc la mise à jour d'une valeur se fait comme cela :

$affected = DB::table('users')
    ->where('id', 1)
    ->update(['options->enabled' => true]);

Est-i possible de mettre à jour les valeurs de 2 clés en une seule opération ?

Par exemple ce code ne met à jour que la valeur de la clé item :

DB::table('article_temp')
    ->where('id', $request->id_item)
    ->update(['data->item' => $request->name], ['data->desc' => $request->description]);
Posté il y a 1 mois
Avatar de michelange2008
michelange2008

Et ça ?

DB::table('article_temp')
    ->where('id', $request->id_item)
    ->update(['data->item' => $request->name, 'data->desc' => $request->description]);
Posté il y a 1 mois
Avatar de sd35
sd35

Et non, j'y avait pensé mais ça ne fonctionne pas. J'ai une erreur de ce style :

SQLSTATE[42601]: Syntax error: 7 ERREUR: affectations multiples pour la même colonne « data »
(SQL: update "article_temp" set "data" = jsonb_set("data"::jsonb, '{"item"}', "azeaeaze"), "data" = jsonb_set("data"::jsonb, '{"desc"}', "eazeazeaze") where "id" = 897)
Posté il y a 1 mois
Avatar de bestmomo
bestmomo

Ca serait pas plutôt comme ça ?

DB::table('article_temp')
    ->where('id', $request->id_item)
    ->update(['data' => ['item' => $request->name, 'desc' => $request->description]]);
Posté il y a 1 mois
Avatar de sd35
sd35

Alors oui cette façon de faire fonctionne mais il faut obligatoirement fournir tous les clés -> valeurs sinon il écrase tout. Par exemple là je met à jour item et desc mais j'ai une 3ème clé nommée link. Si je ne la fournie pas, elle est simplement supprimée. Après ce n'ai pas compliquer à régler. Merci pour la syntaxe :)

Vous ne pouvez pas répondre à ce sujet.