我在书架模型中与关系斗争。我想要做的是创建包含4个表的模式:
他们之间的关系是这样的:
用户 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_roles
。id
为_pivot_id
,privileges_roles
。role_id
为_pivot_role_id
, 来自privileges_roles
的{{1}}。privilege_id
_pivot_privilege_id
内部加入privileges
privileges_roles
。privileges_roles
=privilege_id
。privileges
其中 (1)id
。privileges_roles
而不是{3}中的role_id
,而不是记录中的role_id
。
答案 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');
}