Можно ли (и если да то как) внести изменения в JSON массив только измененного значения не пересобирая массив заново?

Суть такая: У пользователя есть разные опции в аккаунте. Пользователь что-то выбрал в каждой опции и я записал все опции в бд.

$array = [
  'option_1' => '1',
  'option_2' => '2',
  'option_3' => '3'
];

$database->update('users',['user_option[JSON]' => $array],[
  'id' => $user_id
]);

//Далее пользователь решил что-то изменить и прислал другое значение одной из опций.
$newValue = '444';

//Достаю его опции
$user_option = $database->get('users','user_option[JSON]',[
  'id' => $user_id
]);

//Получаю
Array
(
    [option_1] => 1
    [option_2] => 2
    [option_3] => 3
)

//Теперь нужно изменить
[option_1] => 1 на  [option_1] => 444

//Не хочу делать так
$newarray = [
  'option_1' => $newValue,
  'option_2' => $user_option['option_2'],
  'option_3' => $user_option['option_3']
];

$database->update('users',['user_option[JSON]' => $newarray],[
  'id' => $user_id
]);

Есть ли способ изменить только 'option_1' => $newValue не переписывая все опции, т.к их может быть несколько десятков. Спасибо!


Ответы (1 шт):

Автор решения: Majestio

Не указан движок БД. Если это MySQL, то можно воспользоваться "сырыми" запросами для обновления информации. И составлять, собственно, нужные.

К примеру:

  1. Тут про сырые запросы
  2. Тут про частичное обновление JSON-данных

Конечно нужно смотреть еще версию движка БД, чтобы таковая возможность поддерживалась.

→ Ссылка