繁体   English   中英

Sails.js水线查询填充

[英]Sails.js Waterline query populate

假设用户可以拥有多个帐户,并且帐户可以拥有许多用户,并且帐户始终拥有所有者。 有没有更好的方法在Waterline查询语法中写这个?

User.findOneByEmailAddress('user@acme.com').then(function(user) {
  User.findOne(user.id)
  .populate('accounts', {owner: user.id})
  .then(console.log);
});

如果可能的话,我想我会更喜欢这样的东西:

User.findOneByEmailAddress('user@acme.com')
.populate('accounts', {owner: this.id})
.then(console.log);

虽然在这种情况下我认为必须始终发生双重查询,但如果populate()可以引用主叫方ID,它肯定会使代码更容易阅读。

我明白这个例子有点做作。

我也试过这个:

User.findOneByEmailAddress('user@acme.com').then(function(user) {
  user.isAccountOwner().then(console.log);
});

在我的模型中,我定义了一个实例方法:

isAccountOwner: function() {
  var _this = this;
  return new Promise(function(resolve, reject) {
    User.findOne(_this.id)
      .populate('accounts', {owner: _this.id})
      .then(function(user) {
        resolve(!! user.accounts.length > 0);
      })
      .fail(function(err) {
        reject(err);
    });
  });

我花了几分钟才弄清楚你的目标是什么,遗憾的是答案是否定的,目前无法在populate标准中访问“父”查询的结果。 这是一个有趣的想法,你应该考虑发布到Github作为功​​能请求。 使用this不会起作用,但它可能是这样的:

User.findOneByEmailAddress('user@acme.com')
.populate('accounts', {owner: {parent: 'id'}})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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