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