【问题标题】:Sails.js Waterline query populateSails.js 水线查询填充
【发布时间】:2014-09-27 13:28:06
【问题描述】:

假设一个用户可以有多个帐户,一个帐户可以有多个用户,而一个帐户总是有一个所有者。有没有更好的方法来用 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);
    });
  });

【问题讨论】:

    标签: javascript sails.js waterline


    【解决方案1】:

    我花了几分钟才弄清楚你在做什么,遗憾的是答案是否定的,目前无法访问 populate 条件中的“父”查询的结果。这是一个有趣的想法,您应该将posting to Github 视为功能请求。使用 this 是行不通的,但它可能是这样的:

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

    【讨论】:

    猜你喜欢
    • 2014-12-14
    • 1970-01-01
    • 1970-01-01
    • 2015-12-14
    • 1970-01-01
    • 1970-01-01
    • 2014-05-08
    • 2015-02-26
    • 1970-01-01
    相关资源
    最近更新 更多