Продолжение: принудительное обновление для массива JSON

#node.js #sequelize.js

#node.js #sequelize.js

Вопрос:

Sequelize не будет обновлять поле JSON при некоторых обстоятельствах.

Например, у меня есть:

 [[1]] (an array inside array)
 

И я пытаюсь что-то нажать:

 instance.arr[0].push(1); // [[1,1]]
instance.save();
// or:
instance.update({arr: instance.arr});
 

Теперь внутри экземпляра я изменил массив, и внутри БД ничего не изменилось. Даже запрос не отправляется. 🙁

С веб-сайта sequelize:

https://sequelize.org/master/manual/model-instances.html Метод сохранения оптимизирован внутренне для обновления только тех полей, которые действительно изменились. Это означает, что если вы ничего не измените и вызовете save , Sequelize узнает, что сохранение является излишним, и ничего не сделает, т. Е. Запрос не будет сгенерирован (он все равно вернет обещание, но оно будет немедленно разрешено).

Это хорошо, но, похоже, это не работает для json, могу ли я выполнить принудительное обновление?

На сегодняшний день я должен сделать глубокую копию массива, чтобы сохранить его.

Я использую MariaDB IDK, если это имеет значение.

Комментарии:

1. Если вы просто сделаете мелкую копию, чтобы сама ссылка на массив изменилась, т. Е. instance.arr = [...instance.arr] Перед нажатием, Это сработает?

Ответ №1:

Кажется, вам нужно указать, что поле изменилось

 instance.changed( 'arr', true);
instance.save