【发布时间】:2019-10-10 12:08:04
【问题描述】:
我一直在尝试在我的数据库中构建关系以实现更有效的查询和连接,但在遵循 '.belongsToMany'、'.through' 的指南之后和 '.belongsTo' 我现在得到的是空结果。
我有一个 Sound 模型和一个 Keyword 模型,我想用多对多关系对其进行建模(每个 Sound 可以有多个关键字,并且每个关键字可以与多个声音相关)。根据文档,“.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 设置。
【问题讨论】:
标签: orm knex.js bookshelf.js