Bookshelf.js belongsToMany 查询列错误
Bookshelf.js belongsToMany query with wrong column
我正在努力处理书架模型中的关系。我要做的是创建包含 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);
}
});
};
}
特权角色
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);
}
});
};
}
那些真的很好用。不幸的是,当我试图从 User 模型中获取 Privileges 时,它一直插入 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');
}
});
};
}
所以最后无论我做什么,书架都会创建这样的查询:
select privileges
.*, privileges_roles
.id
as _pivot_id
,
privileges_roles
.role_id
as _pivot_role_id
,
privileges_roles
.privilege_id
as _pivot_privilege_id
from
privileges
inner join privileges_roles
on
privileges_roles
.privilege_id
= privileges
.id
where
privileges_roles
.role_id
in (1)
而不是 (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');
}
我正在努力处理书架模型中的关系。我要做的是创建包含 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);
}
});
};
}
特权角色
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);
}
});
};
}
那些真的很好用。不幸的是,当我试图从 User 模型中获取 Privileges 时,它一直插入 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');
}
});
};
}
所以最后无论我做什么,书架都会创建这样的查询:
select
privileges
.*,privileges_roles
.id
as_pivot_id
,privileges_roles
.role_id
as_pivot_role_id
,privileges_roles
.privilege_id
as_pivot_privilege_id
fromprivileges
inner joinprivileges_roles
onprivileges_roles
.privilege_id
=privileges
.id
whereprivileges_roles
.role_id
in (1)
而不是 (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');
}