node.js - 如何在 KnexJS + bookshelf 中查询嵌套外键
问题描述
我将 knexJS 和 bookshelf ORM 用于我的 nodejs 应用程序。问题是,当给出记录 ID 时,我需要查询以获取其“曾孙”记录的列表。目标表中有数千条记录,因此页码和大小也应该作为参数传递,我需要通过查询对其进行排序。获取所有记录后进行过滤不是解决方案。
让我解释一下模型之间的关系。
// MenuItem model
module.exports = (Model, models) => {
return Model.extend({
tableName: 'menu_items',
menu_day() {
return this.belongsTo(models.MenuDay);
},
});
};
这是MenuItem
我要列出的模型。如您所见,它MenuDay
通过外键与模型相关。
// MenuDay model
module.exports = (Model, models) => {
return Model.extend({
tableName: 'menu_days',
menu_items() {
return this.hasMany(models.MenuItem);
},
menu() {
return this.belongsTo(models.Menu);
}
});
};
MenuDay
Menu
模型通过外键与模型相关。
// Menu model
module.exports = (Model, models) => {
return Model.extend({
tableName: 'menus',
menu_days() {
return this.hasMany(models.MenuDay);
},
restaurant() {
return this.belongsTo(models.Restaurant);
}
});
};
Menu
模型与此相关,Restaurant
餐厅 ID 只是作为该职位的输入。
// Restaurant model
module.exports = (Model, models) => {
return Model.extend({
tableName: 'restaurants',
menus() {
return this.hasMany(models.Menu);
}
});
};
我尝试了很多解决方案来解决这个问题,但我在这个问题上浪费了几天时间。不管是什么,任何帮助将不胜感激!你会救我的命。
解决方案
您可以使用以下withRelated
选项fetch()
:
new Restaurant({id: 1}).fetch({
withRelated: ['menus.menu_days.menu_items']
}).then(restaurant => {
const menus = restaurant.related('menus')
const menuDays = menus.related('menu_days')
const menuItems = menuDays.related('menu_items')
})
推荐阅读
- python - python中的递归,不覆盖更改的变量
- jenkins - 在 Openshift 中为 Jenkins 实例配置不同的构建工具
- python - FileNotFoundError: [Errno 2] 文件 stock_dfs/BRK.B.csv 不存在:如果文件不存在如何调整代码:
- javascript - Reducer 被触发但订阅功能没有获取更改 [React-Redux]
- python - 从python数据框中的第二个下划线后获取数据?
- scala - 尝试使用 DataSourceV2 将 DataFrames 保存到 Phoenix 时出现“数据源不是 org.apache.phoenix 的成员”
- git - 使用 Git 输入远程名称;我该如何解决?
- node.js - 如何在mongodb中保存日期类型dd/mm/yyyy格式
- android - 阻止文本视图离开屏幕
- javascript - 如何让图像的不透明度随着时间的推移而上升,而不是立即使用 css