我想知道,是否可以在帆中使用自定义属性来查询某些记录?也许我下面的例子能更好地解释它。
模型/User.js
attributes: { first_name: 'string', last_name: 'string' }
模型/ModelA.js
attributes: {
user: {model: 'User'},
studentName: function(){ return this.user.first_name + " " this.user.last_name },
....
}
我查询ModelA.find({studentName: {contains: searchKeyword }}).populate('user').then(console.log);
提前感谢各位。
不,Waterline不会在查询期间计算实例方法。在评估标准时,它也无法访问已填充的模型;即this.user
为空。您需要执行没有studentName
属性的find
,然后自己过滤结果:
ModelA.find().populate('user').exec(function(err, models) {
models = _.where(models, function(model) {
return model.studentName().match(searchKeyword);
}
});
如果这是一个真实的例子,最好搜索User模型,填充ModelA:
User.find(
{or: [
{firstName: {contains: searchKeyword}},
{lastName: {contains: searchKeyword}}
]}
).populate('modela').exec(...)