Loopbackjs loopback model.find基于相关模型的参数
我遇到了一个问题,就是步履蹒跚:Loopbackjs loopback model.find基于相关模型的参数,loopbackjs,Loopbackjs,我遇到了一个问题,就是步履蹒跚: Model 1: Guest - props {"slug":"string"} Model 2: Project - props {"prefix":"string"} Relation: Project has many guests 如何编写远程方法:findGuestWithProject(前缀,slug)将返回guest和slug(精确匹配但不区分大小写)以及具有精确前缀的相关项目 我遇到的问题: 初始过滤器返回带有相似但不精确的slug f.e
Model 1: Guest - props {"slug":"string"}
Model 2: Project - props {"prefix":"string"}
Relation: Project has many guests
如何编写远程方法:findGuestWithProject(前缀,slug)
将返回guest
和slug
(精确匹配但不区分大小写)以及具有精确前缀的相关项目
我遇到的问题:
初始过滤器返回带有相似但不精确的slug f.e的来宾
。如果我通过“anna”
。find
可以返回带有slug的来宾“anna maria”,因此稍后我需要检查id slug是否完全相同
项目的来宾
。前缀
,因此我需要执行额外的循环以找到精确匹配Guest.getGuestProject=函数(前缀、slug、cb){
如果(!前缀)返回;
var模式=新的RegExp(slug,“i”);
app.models.Project.findOne({
“where”:{“prefix”:prefix}
},(错误,项目)=>{
if(err){throw err};
如果(!project)cb(null,null);
返回项目。客人({
“where”:{“slug”:pattern},
“包括”:{“关系”:“项目”、“范围”:{“包括”:{“关系”:“rsvps”}}
},(呃,客人)=>{
if(guests.length==0)cb(null,null)
guests.forEach(guest=>{
if(guest.slug.toLowerCase()==slug.toLowerCase()){
cb(空,来宾)
}
})
})
})
关于1:您的regexp正在检查是否包含slug
对于2和3,我刚刚重写了它。您还没有指定您正在使用的db连接器(mongodb、mysql、postgres等)因此,我基于Postgresql编写了这个示例,这是我通常使用的示例,也是最糟糕的情况之一,因为关系数据库不支持按嵌套属性进行过滤。如果您使用Mongodb或Cloudant,请查看中提供的示例,因为此片段可能更简单
如果这个答案不是你想要的,那么我可能需要更多的细节。我也使用承诺而不是回电
Guest.getGuestProject = function(prefix, slug) {
const Project = Guest.app.models.Project;
// First of all find projects with the given prefix
return Project.find({
where: {
prefix: prefix
},
include: 'guests'
}).then(projects => {
projects.forEach(project => {
let guests = project.guests();
guests.forEach(guest => {
// See if guest.slug matches (case-insensitive)
if (guest.slug.match(new RegExp(slug, 'i'))) {
return guest;
}
});
});
});
};