【发布时间】: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