Node.js 从具有HasManyThrough关系的模型进行查询-strongloop api
这是对前一个问题的跟进。目前,api可以从共享关系的Node.js 从具有HasManyThrough关系的模型进行查询-strongloop api,node.js,loopbackjs,strongloop,Node.js,Loopbackjs,Strongloop,这是对前一个问题的跟进。目前,api可以从共享关系的类别和游戏模型中进行查询。例如,通过此端点/Categories/1001/games/mature我可以列出格斗类别中成熟设置为真的所有游戏。但是,我已经从db tablegame\u info中加入了第三个模型gameInfo。因为,我想从这三个表中获取信息,所以我从db表games\u categories\u bridge中包含了一个名为gamesCategoriesBridge的直通模型。我按照指导方针来制定。问题在于,诸如descr
类别
和游戏
模型中进行查询。例如,通过此端点/Categories/1001/games/mature
我可以列出格斗
类别中成熟
设置为真
的所有游戏。但是,我已经从db tablegame\u info
中加入了第三个模型gameInfo
。因为,我想从这三个表中获取信息,所以我从db表games\u categories\u bridge
中包含了一个名为gamesCategoriesBridge
的直通模型。我按照指导方针来制定。问题在于,诸如description
和publishedDate
等附加信息不会显示在最终结果中。如何正确设置remoteMethod
以完成以下任务
通用/models/category.js
表架构:
分类
游戏
游戏信息
桥牌游戏
端点:/categories/{id}/games/mature
API响应所需的格式:
games [
{
gameName: 'Tekken',
gameInfo :
[
{
description : 'Published by Namco.',
published_date : '1994'
}
],
categorName: 'fighting',
categoryId: 1001,
mature: true
}
.....
]
首先在
game
和game\u info
模型之间创建一个hasMany
关系
//Now inside remote_method.
Category.mature = function(id, callback) {
var app = this.app;
var Game = app.models.game;
Category.findById(id, {}, function(err, category) {
if (err) return callback(err);
//Now call the Game find method
Game.find({
"where": {
categoryId: id,
mature: true
},
include:'game_info'
}, function(err, gameArr) {
if (err) return callback(err);
gameArr.forEach(function(gameObj, index){
gameObj.categoryName = category.category_name;
});
callback(null, gameArr);
});
});
}
您想要的API响应格式具有
game\u info
属性,但它显示了与类别相关的信息。另外,我认为您需要重新设计数据库的模式。因为使用这个模式你可以实现你想要的,但事情会变得比正常情况更困难。@RobinsGupta,对不起,输入错误。已更正所需的API响应。games->category model
之间的关系是什么?每个game
属于一个category
还是每个game
可以有多个category
?@RobinsGupta每个游戏可以有多个category对于第一个,其中我得到了错误ER\u BAD\u字段\u错误:“where子句”中的未知列“category\u id id”
@code\u Ed\u学生我有一个输入错误编辑它检查。您是否能够将社交登录身份验证与环回结合起来?
game_id game_name category_id mature
----------- ------------ ----------- --------------
13KXZ74XL8M Tekken 10001 true
138XZ5LPJgM Forza 10002 false
game_id description published_date
----------- ----------- --------------
13KXZ74XL8M Published by Namco. 1994
138XZ5LPJgM Published by Microsoft Studios. 2005
game_id category_id
----------- -----------
13KXZ74XL8M 10001
138XZ5LPJgM 10002
games [
{
gameName: 'Tekken',
gameInfo :
[
{
description : 'Published by Namco.',
published_date : '1994'
}
],
categorName: 'fighting',
categoryId: 1001,
mature: true
}
.....
]
//Now inside remote_method.
Category.mature = function(id, callback) {
var app = this.app;
var Game = app.models.game;
Category.findById(id, {}, function(err, category) {
if (err) return callback(err);
//Now call the Game find method
Game.find({
"where": {
categoryId: id,
mature: true
},
include:'game_info'
}, function(err, gameArr) {
if (err) return callback(err);
gameArr.forEach(function(gameObj, index){
gameObj.categoryName = category.category_name;
});
callback(null, gameArr);
});
});
}