我正在使用 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.
}
}
};
基本上,owner 是与发出请求的人的关联,而 people 是与请求所针对的所有 Person 的一对多关联。到目前为止一切顺利。
现在我想要一个 Controller ,它返回所有涉及特定用户的请求,这意味着用户在所有者字段中或在人中的所有请求。我如何查询“给我所有与 P 有关联的行”?换句话说,我怎么知道哪些 URequest 模型与某个人有关联?
我试过这样的:
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 是否在 people 中?我知道我应该能够以某种方式查看连接表,但我不知道如何也无法从与我的情况相关的 Waterline 文档中找到很多。此外,我试图保持这种与数据库无关的状态,尽管我使用的是 MongoDB,但以后可能会使用 Postgres。
最佳答案
老实说,这是一个棘手的问题,据我所知,使用 Waterline 无法实现您尝试执行的操作,因此如果您使用的是基于 sql 的适配器或 native ,或者尝试进行一些手动过滤。手动过滤取决于您处理的数据集有多大。
我的想法立即开始稍微修改您的数据模型,也许您有一个存储关联的表而不是集合。像这样:
module.exports = {
attributes: {
owner: {
model: 'URequest'
},
person: {
model: 'Person'
}
}
使用 sailsjs 模型方法(如 beforeCreate),您可以根据需要自动创建这些关联。
祝你好运,我希望你能成功!
关于javascript - Sails.js Waterline 查询(按关联),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32635407/