I got three tables (person
, language
, personSpeaksLanguage
) and I want to insertOrUpdate
the link table (personSpeaksLanguage
) by a given id (personId
) and array of keys (languageIds
). How to archive this?
Example:
person
| id | name |
| 1 | 'Maria' |
| 2 | 'Jim' |
| 4 | 'John' |
language
| id | name |
| 1 | 'english' |
| 2 | 'spanish' |
| 4 | 'japanse' |
personSpeaksLanguage
| personId | languageId | deleted |
| 1 | 2 | 0 |
| 4 | 2 | 1 |
| 4 | 3 | 0 |
| 2 | 1 | 1 |
Example vars:
database='./database.db'
table='personSpeaksLanguage'
personId=2
languageIds=[1,2,4]
The aim is to achieve that for personSpeaksLanguage
the values (2,2
) and (2,4
) get added. Since (2,1
) is already in the table. But got softdeleted previously, it should update
to deleted = 0
. This is my pitifully try without update
.
const sqlite3 = require('sqlite3').verbose();
export default function insertOrUpdateMultiple(database, table, personId, languageIds) {
return new Promise((resolve, reject) => {
const db = new sqlite3.Database(database);
let i = 0;
while (i < languageIds.length) {
db.run(`INSERT INTO ${table} (id, name) VALUES (${personId}, ${languageIds[i]})`, values, (err) => {
if (err) reject(err);
}, (err) => {
if (err) {
reject(err);
} else {
i += 1;
}
});
}
});
}