Имеет ли sequelize эквивалент функции mysqls replace? - PullRequest
0 голосов
/ 08 апреля 2020

Вопрос не требует пояснений.

Заменить: работает точно так же, как INSERT, за исключением того, что если старая строка в таблице имеет то же значение, что и новая строка для PRIMARY KEY или UNIQUE индекса, старая строка удаляется перед вставкой новой строки

Поэтому запрос, который я хотел бы выполнить, является

REPLACE INTO questions SET question = 'myquestions', category = 'mycategory', isNew = '0';

, и моя таблица выглядит следующим образом:

CREATE TABLE questions (
id int(11) NOT NULL AUTO_INCREMENT,
question varchar(254) NOT NULL,
category varchar(254) NOT NULL,
isNew tinyint(1) NOT NULL,
PRIMARY KEY (id),
UNIQUE KEY (category, isNew)
);

Таким образом, цель в том, что если уже есть строка с такой же категорией и isNew, удалите ее перед созданием новой строки.

1 Ответ

1 голос
/ 09 апреля 2020

Имеется функция UPSERt

См. Документацию

Вставьте или обновите одну строку. Обновление будет выполнено, если найдена строка, которая соответствует предоставленным значениям либо по первичному ключу, либо по уникальному ключу. Обратите внимание, что уникальный индекс должен быть определен в вашей модели сиквелиза, а не только в таблице. В противном случае вы можете столкнуться с уникальным нарушением ограничения, потому что sequelize не может определить строку, которая должна быть обновлена.

  Model.upsert({uniqueKey: 1234, name: 'DarthVader'}).then(function () {
  });
...