У меня есть следующие модели, определенные в 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 и других моделях, упомянутых ранее.Наконец, я создаю экземпляр библиотеки со всеми определенными вложенными ассоциациями.
Теперь, если библиотека уже существует, мне нужно обновить данные, связанные с ней и ее моделями.Я уже попробовал несколько вещей:
Можно ли каким-либо другим способом обновить связанные экземпляры модели?
Любая помощь будет оценена.Спасибо.