delphinpro
@delphinpro
frontend developer

Как можно обновить (добавить данные) JSON поле?

Имеем в таблице поле

`names` JSON NULL DEFAULT NULL,

Пытаюсь его обновить

DB::table('towns')
  ->where('id', $town['id'])
  ->update([
    'names' => "JSON_MERGE_PATCH(`names`, JSON_OBJECT('$timestamp', '$name'))"
  ]);


Получаю ошибку

SQLSTATE[22032]: <<Unknown error>>: 3140 Invalid JSON text: "Invalid value."
 at position 0 in value for column 'towns.names'.
 (SQL: update `towns` set `names` = JSON_MERGE_PATCH(`names`, JSON_OBJECT('1599001255', 'Кэрг')) where `id` = 1225)


Но если выполняю этот же запрос в heidisql, то он нормально выполняется

UPDATE `towns`
SET
   `names` = JSON_MERGE_PATCH(`names`, JSON_OBJECT('1599001255', 'Кэрг'))
WHERE `id` = 1225


В чём мой косяк? Как можно обновить json поле используя фасад DB (Eloquent и модели здесь не нужны)?
  • Вопрос задан
  • 202 просмотра
Решения вопроса 1
delphinpro
@delphinpro Автор вопроса, куратор тега Laravel
frontend developer
Решение:

DB::table('towns')
  ->where('id', $town['id'])
  ->update([
    'names' => DB::raw("JSON_MERGE_PATCH(`names`, JSON_OBJECT('$timestamp', '$name'))")
  ]);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы