[英]Sails.js Waterline query by association
我正在使用Sails.js开发和应用程序,并使用Waterline orm for db。 我正在开发一些功能,以便用户彼此之间进行好友请求和其他类似请求。 我有以下的URequest模型:
module.exports = {
attributes: {
owner: {
model: 'Person'
},
people: {
collection: 'Person'
},
answers: {
collection: 'URequestAnswer'
},
action: {
type: 'json' //TODO: Consider alternative more schema consistent approach.
}
}
};
所有者基本上是与提出请求的人员的关联,而人员是与提出请求的所有人员的一对多关联。 到目前为止还好。
现在,我想要一个控制器,该控制器返回涉及特定用户的所有请求,这意味着该用户位于所有者字段或人员中的所有请求。 我该如何查询,例如“给我与个人P有关联的所有行”? 换句话说,我如何知道哪些URequest模型与某个Person相关联?
我尝试过这样的事情:
getRequests: function (req, res) {
var personId = req.param('personId');
URequest.find().where({
or: [
{people: [personId]}, //TODO: This is not correct
{owner: personId}
]
}).populateAll().then(function(results) {
res.json(results);
});
},
因此,我知道该怎么做“或”部分,但如何检查personId是否在人员中? 我知道我应该能够以某种方式查看联接表,但我不知道如何从Waterline文档中找到与我的情况有关的信息。 另外,尽管atm我使用的是MongoDB,但我仍尝试保持此数据库不可知,但以后可能会使用Postgres。
老实说,这是一个棘手的问题,据我所知,您无法使用Waterline进行尝试,因此如果使用基于SQL的适配器,则可以选择使用query()编写本机查询或本机,否则尝试进行一些手动过滤。 手动过滤将取决于您要处理的数据集的大小。
我立即想到要稍微修改一下数据模型,也许有一个存储关联的表而不是集合。 像这样:
module.exports = {
attributes: {
owner: {
model: 'URequest'
},
person: {
model: 'Person'
}
}
使用sailsjs模型方法(如beforeCreate),您可以根据需要自动创建这些关联。
祝你好运,我希望你能成功!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.