Sqlite 更新记录及其与sequelize的关联
我在sequelize中定义了以下模型: 库、媒体父目录、媒体子目录和媒体子目录 前三个保存关于系统上目录的信息,最后一个保存关于系统上特定目录中文件的信息 这些协会如下:Sqlite 更新记录及其与sequelize的关联,sqlite,associations,sequelize.js,Sqlite,Associations,Sequelize.js,我在sequelize中定义了以下模型: 库、媒体父目录、媒体子目录和媒体子目录 前三个保存关于系统上目录的信息,最后一个保存关于系统上特定目录中文件的信息 这些协会如下: Library.MediaParentDirs = Library.hasMany(models.MediaParentDir, {onDelete: 'CASCADE'}); Library.MediaSubDirs = Library.hasMany(models.MediaSubDir, {onDelete: 'CAS
Library.MediaParentDirs = Library.hasMany(models.MediaParentDir, {onDelete: 'CASCADE'});
Library.MediaSubDirs = Library.hasMany(models.MediaSubDir, {onDelete: 'CASCADE'});
MediaParentDir.MediaSubDirs = MediaParentDir.hasMany(models.MediaSubDir, {onDelete: 'CASCADE'});
MediaSubDir.Episodes = MediaSubDir.hasMany(models.Episode, {onDelete: 'CASCADE'});
这是我第一次运行时填充数据库的方式:
db.Library.find({
where: lib
}).then((existingLib) => {
let includes = [{
model: db.MediaParentDir,
include: [{
model: db.MediaSubDir,
include: [db.Episode]
}]
},
{
model: db.MediaSubDir,
include: [db.Episode]
}
];
let mediaParentDirs = removeIgnored(library.getMediaParentDirsFrom(lib))
.map((parentDir) => {
parentDir.MediaSubDirs = removeIgnored(library.getMediaSubDirsFrom(parentDir));
parentDir.MediaSubDirs.map((subDir) => {
subDir.Episodes = removeIgnored(library.getMediaSubDirEpisodesFrom(subDir));
return subDir;
});
return parentDir;
});
let mediaSubDirs = removeIgnored(library.getMediaSubDirsFrom(lib))
.map((subDir) => {
subDir.Episodes = removeIgnored(library.getMediaSubDirEpisodesFrom(subDir));
return subDir;
});
let updatedLib = db.Library.build({
name: lib.name,
path: lib.path,
type: lib.type,
// Add all media parent dirs and child sub dirs under media parent dirs
MediaParentDirs: mediaParentDirs,
// Add all media sub dirs directly under library
MediaSubDirs: mediaSubDirs,
}, {
include: includes
});
if (!existingLib)
return updatedLib.save();
// Record already exists. Update library data.
});
在上面的代码中,我正在阅读库目录并收集有关MediaParentDir和前面提到的其他模型的所有信息。最后,我用定义的所有嵌套关联构建了一个库实例
现在,如果库已经存在,我需要更新与之关联的数据及其模型。我已经尝试了一些方法:
但这不会更新关联Library.upsert()
同上Library.update()
from,但这要求我明确提供对象IDembed.update()
for (let assoc of Object.keys(db[modelName].associations)) {
for (let accessor of Object.keys(db[modelName].associations[assoc].accessors)) {
console.log(db[modelName].name + '.' + db[modelName].associations[assoc].accessors[accessor]+'()');
}
据我所知,本例中的setter用于关联两个已经存在的记录。我正在尝试更新已关联记录中的数据。