pat*_*r82 6 javascript sails.js waterline
假设用户可以拥有多个帐户,并且帐户可以拥有许多用户,并且帐户始终拥有所有者.有没有更好的方法在Waterline查询语法中写这个?
User.findOneByEmailAddress('user@acme.com').then(function(user) {
User.findOne(user.id)
.populate('accounts', {owner: user.id})
.then(console.log);
});
Run Code Online (Sandbox Code Playgroud)
如果可能的话,我想我会更喜欢这样的东西:
User.findOneByEmailAddress('user@acme.com')
.populate('accounts', {owner: this.id})
.then(console.log);
Run Code Online (Sandbox Code Playgroud)
虽然在这种情况下我认为必须始终发生双重查询,但如果populate()可以引用主叫方ID,它肯定会使代码更容易阅读.
我明白这个例子有点做作.
我也试过这个:
User.findOneByEmailAddress('user@acme.com').then(function(user) {
user.isAccountOwner().then(console.log);
});
Run Code Online (Sandbox Code Playgroud)
在我的模型中,我定义了一个实例方法:
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);
});
});
Run Code Online (Sandbox Code Playgroud)
我花了几分钟才弄清楚你在追求什么,遗憾的是答案是否定的,目前无法访问条件中“父”查询的结果populate。这是一个有趣的想法,您应该考虑将其作为功能请求发布到 Github 。使用this是行不通的,但它可能是这样的:
User.findOneByEmailAddress('user@acme.com')
.populate('accounts', {owner: {parent: 'id'}})
Run Code Online (Sandbox Code Playgroud)