gpt4 book ai didi

sqlite - 更新记录及其与 sequelize 的关联

转载 作者:行者123 更新时间:2023-12-03 22:39:55 25 4
gpt4 key购买 nike

我在 sequelize 中定义了以下模型:

MediaParentDir MediaSubDir MediaSubDirEpisodes

前三个保存有关系统上目录的信息,最后一个保存有关系统上特定目录中文件的信息。

协会如下:

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.

});

在上面的代码中,我正在读取库目录并收集有关 MediaParentDirs 和前面提到的其他模型的所有信息。最后,我构建了一个定义了所有嵌套关联的 Library 实例。

现在,如果一个库已经存在,我需要更新与其关联的数据及其模型。我已经尝试了一些事情:
  • Library.upsert() 但这不会更新关联。
  • Library.update() 同上。
  • embed.update() 来自 https://github.com/Wsiegenthaler/sequelize-embed 但这需要我明确提供对象 ID

  • 有没有其他方法可以更新关联的模型实例?

    任何帮助,将不胜感激。谢谢。

    最佳答案

    自动将 adds setter methods 序列化为可用于更新数据库中相关数据的模型。

    以下是我用来列出方法的代码。在定义关联并重新启动节点服务器后,将其添加到 index.js 中。

       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]+'()');
    }

    关于sqlite - 更新记录及其与 sequelize 的关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50699673/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com