Я пытался структурировать отношения в своей базе данных для более эффективных запросов и объединений, но после следования инструкциям для '. AssignToMany' , '. Through' и '. OwnTo' Теперь я получаю пустые результаты.
У меня есть модель Sound и модель Keyword , которую я хочумодель с отношением «многие ко многим» (каждый звук может иметь несколько ключевых слов, а каждое ключевое слово может быть связано с несколькими звуками).На основе документации '.belongsToMany' будет использоваться здесь для использования.
Я настроил свои модели следующим образом, используя реляционную таблицу sound_keyword / SoundKeyword реляционная модель (где каждая запись имеет свой уникальный 'id' , 'soundID' и 'keywordID' ):
var Sound = bookshelf.Model.extend({
tableName: 'sounds',
keywords: function () {
return this.belongsToMany(Keyword, 'sound_keyword', 'id', 'id').through(SoundKeyword, 'id', 'soundID');
},
});
var Keyword = bookshelf.Model.extend({
tableName: 'keywords',
sounds: function () {
return this.belongsToMany(Sound, 'sound_keyword', 'id', 'id').through(SoundKeyword, 'id', 'keywordID');
}
});
где:
var SoundKeyword = bookshelf.Model.extend({
tableName: 'sound_keyword',
sound: function () {
return this.belongsTo(Sound, 'soundID');
},
keyword: function () {
return this.belongsTo(Keyword, 'keywordID');
}
});
Из того, что я прочитал в документации и на странице BookshelfJS GitHub, вышеприведенное выглядит правильным.Несмотря на это, когда я запускаю следующий запрос я получаю пустой набор результатов (рассматриваемый звук связан с 3 ключевыми словами в БД):
var results = await Sound
.where('id', soundID)
.fetch({
withRelated: ['keywords']
})
.then((result) => {
console.log(JSON.stringify(result.related('keywords')));
})
Куда я иду с этим?Правильно ли установлены отношения (возможно, неправильные внешние ключи?)?Я неправильно выбираю связанные модели?
Рад предоставить вам установку Knex по мере необходимости.