繁体   English   中英

Sails.js水线查询关联

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM