Strongloop Loopback Native SQL

时间:2015-03-11 09:10:38

标签: mysql roles relationships loopbackjs

我在环回应用程序中遇到以下情况:

  1. 我有一个' Person'从内置'用户'
  2. 扩展的课程
  3. 我有学生(' Person'班级,角色'学生')
  4. 我有老师(' Person'班级,角色'老师')
  5. 我有类组(与Person类相关的ClassGroup类,带有hasManyAndBelongsTo)
  6. 学生和教师以相同的方式添加到班级组。教师可以有多个班级组,学生没有。如果我想看到所有同一班级的学生,作为老师,我在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'过滤结果,而我不知道该怎么做?

0 个答案:

没有答案