簡體   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