我在环回应用程序中遇到以下情况:
学生和教师以相同的方式添加到班级组。教师可以有多个班级组,学生没有。如果我想看到所有同一班级的学生,作为老师,我在Person上使用远程方法。在该方法中,我使用以下SQL(21是教师的id):
SELECT * FROM `Person`
JOIN `ClassGroupPerson`
ON `Person`.`id` = `ClassGroupPerson`.`personId`
JOIN `RoleMapping`
ON `RoleMapping`.`principalType` = "USER"
AND `RoleMapping`.`principalId` = `Person`.`id`
JOIN `Role`
ON `Role`.`name` = "student"
AND `Role`.`id` = `RoleMapping`.`roleId`
WHERE
`ClassGroupPerson`.`classGroupId` IN (
SELECT `classGroupId`
FROM `ClassGroupPerson`
WHERE `personId` = 21
)
在文档中,它说,不鼓励使用本机Mysql(http://docs.strongloop.com/display/public/LB/Executing+native+SQL)。
我如何在环回式'中获得相同的结果。我尝试使用过滤器,include,hasManyTrough,... -stuff但是我无法达到相同的效果?
额外的问题:这个结果是JSON对象,如何将这些对象轻松转换为Person对象?
修改
在我的远程方法中使用以下代码,我已经接近了:
Person.find({
include: {
relation: 'classgroups',
scope: {
include: {
relation: 'people'
}
}
},
where: {
id: id
}
}, function(err, people){
cb(err, people);
});
我的结果是:我的老师,包括他的班级小组,每个班级小组,我都有关联人员(老师和学生)。剩下的问题是老师也被包括在教室里,所以我应该能够按照Role =' student'过滤结果,而我不知道该怎么做?