簡體   English   中英

Bookshelf.js屬於錯誤的列的TogetherToMany查詢

[英]Bookshelf.js belongsToMany query with wrong column

我正在為書架模型內部的關系而奮斗。 我想做的是創建包含4個表的架構:

  • 使用者
  • 角色
  • 特權
  • privileges_roles

他們之間的關系是這樣的:

用戶 manyTOone 角色 manyTOone 特權 _ 角色 oneTO許多特權

我已經通過以下方法輕松實現了特權和角色之間的關系:

禮遇

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);
          }
        });
    };
}

特權角色

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_roles id_pivot_idprivileges_roles role_id_pivot_role_idprivileges_roles privilege_id作為_pivot_privilege_idprivileges內加入privileges_rolesprivileges_roles privilege_id = privileges id where privileges_roles (1)中的role_id

而不是像(3)中的role_id那樣,它在獲取的記錄中。

好了,所以我終於找到了解決方案。 代替以前使用:

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');
            }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM