Bookshelf.js属于错误列的ToMany查询

时间:2017-01-29 22:17:46

标签: javascript mysql bookshelf.js

我在书架模型中与关系斗争。我想要做的是创建包含4个表的模式:

  • 用户
  • 角色
  • 权限
  • privileges_roles

他们之间的关系是这样的:

用户 manyTOone 角色 manyTOone privileges_roles oneTOmany 特权

我很容易通过以下方式实现特权和角色之间的关系:

权限

class Privileges {
    constructor() {
        this.model = bookshelf.Model.extend({
            tableName: 'privileges',
            roles: function () {
                return this.belongsToMany(Roles.model).through(PrivilegeRole.model);
            }
        });
    };
}

角色

class Roles {
    constructor() {
        this.model = bookshelf.Model.extend({
          tableName: 'roles',
          privileges: function() {
              return this.belongsToMany(Privileges.model).through(PrivilegeRole.model);
          },
          users: function() {
              return this.hasMany(Users.model);
          }
        });
    };
}

PrivilegeRole

class PrivilegeRole {
    constructor() {
        this.model = bookshelf.Model.extend({
          tableName: 'privileges_roles',
          role: function() {
              return this.belongsTo(Roles.model);
          },
          privileges: function() {
              return this.belongsTo(Privileges.model);
          }
        });
    };
}

那些作品真的很好。不幸的是,当我尝试从用户模型中获取权限时,它会继续插入 id 而非 role_id 查询。

class Users {
    constructor() {
        this.model = bookshelf.Model.extend({
            tableName: 'users',
            role: function () {
                return this.belongsTo(Role.model);
            },
            privileges: function () {
                // return this.belongsToMany(Privileges.model).through(PrivilegeRole.model);
                return this.belongsToMany(Privileges.model, 'privileges_roles', 'role_id', 'privilege_id', 'role_id');
            }
        });
    };
}

所以无论我做什么,书架都在创建这样的查询:

  

选择privileges。*,privileges_rolesid_pivot_id,   privileges_rolesrole_id_pivot_role_id,   来自privileges_roles的{​​{1}}。privilege_id   _pivot_privilege_id内部加入privileges   privileges_rolesprivileges_roles = privilege_idprivileges其中   (1)

中的idprivileges_roles

而不是{3}中的role_id,而不是记录中的role_id

1 个答案:

答案 0 :(得分:1)

好吧,所以我终于找到了解决方案。而不是以前使用过:

privileges: function () {
                return this.belongsToMany(Privileges.model, 'privileges_roles', 'role_id', 'privilege_id', 'role_id');
            }

我不得不简单地使用:

privileges: function () {
                return this.belongsToMany(Privileges.model).through(PrivilegeRole.model, 'role_id', 'privilege_id', 'role_id');
            }