#mysql #node.js
#mysql #node.js
Вопрос:
моя таблица выглядит следующим образом user_roles
ID | role_id | идентификатор пользователя |
---|---|---|
1 | 1 | 1 |
2 | 2 | 1 |
и я попробовал с этим запросом raw json
"roles": [
{
"id": 1,
"role_id": 3, // update data
"user_id": 1
}
],
моя миграция
await queryInterface.createTable('user_roles', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},```
# my controller
await user_role.bulkCreate(
bulkRole,
{
updateOnDuplicate: ["role_id", "user_id", "id"],
ignoreDuplicates: true,
returning: true
}
).then(async(result) => {
console.log(`result ${result}`)
}).catch(async(err) => {
console.log(`result err ${err}`)
});
но в журнале npm run dev я получил это
INSERT IGNORE INTO `user_roles` (`role_id`,`user_id`,`created_at`,`updated_at`)
VALUES (3,5,'2021-12-07 09:38:47','2021-12-07 09:38:47')
ON DUPLICATE KEY UPDATE `role_id`=VALUES(`role_id`),`user_id`=VALUES(`user_id`);
id
проверки нет, я хочу обновлять только с идентификатором, поэтому он хотел бы updateOnDuplicate: ["id"],
но снова возникает ошибка
result err SequelizeDatabaseError: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
в моей модели я не могу определить идентификатор
user_role.init({
// id: DataTypes.INTEGER, # if i enable the Error: A column called 'id' was added to the attributes of 'user_roles' but not marked with 'primaryKey: true'
role_id: DataTypes.INTEGER,
user_id: DataTypes.INTEGER,
delete_flag: DataTypes.INTEGER,
}, {
sequelize,
modelName: 'user_role',
underscored: true,
});
также я пробовал с upsert
const [record, created] = await user_role.upsert(
{
id: data.id, // You do still need to provide the id of the record you want to upsert or a new record will be created.
user_id: data.user_id,
role_id: data.role_id,
}, // Record to upsert
{ returning: true } // Return upserted record
);
но всегда добавляются новые данные
ID | role_id | идентификатор пользователя |
---|---|---|
1 | 1 | 1 |
2 | 2 | 1 |
3 | 3 | 1 |
чего я ожидал, так это
ID | role_id | идентификатор пользователя |
---|---|---|
1 | 1 | 1 |
2 | 3 | 1 |
но из этих ссылок https://www.javatpoint.com/mysql-insert-on-duplicate-key-update я только что добавил updateOnDuplicate: ['role_id']
для изменения только role_id, но все равно вставил запись, которая не обновляется.