[英]Bookshelf.js belongsToMany query with wrong column
我正在为书架模型内部的关系而奋斗。 我想做的是创建包含4个表的架构:
他们之间的关系是这样的:
用户 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_id
和privileges_roles
。role_id
为_pivot_role_id
,privileges_roles
。privilege_id
作为_pivot_privilege_id
从privileges
内加入privileges_roles
上privileges_roles
。privilege_id
=privileges
。id
whereprivileges_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.