Ich kämpfe hart mit Beziehungen in meinem Bücherregal-Modell. Was ich versuche zu tun, Schema zu erstellen, die 4 Tabellen enthält:Bookshelf.js gehört zu viel Abfrage mit falscher Spalte
- Benutzer
- Rollen
- Privilegien
- privileges_roles
Mit Beziehungen zwischen ihnen wie folgt aus:
Benutzer manyTOone Rollen manyTOone privileges_roles OneToMany Privilegien
Ich habe einfach die Beziehungen zwischen Rechten und Rollen erreicht mit:
Privilegien
class Privileges {
constructor() {
this.model = bookshelf.Model.extend({
tableName: 'privileges',
roles: function() {
return this.belongsToMany(Roles.model).through(PrivilegeRole.model);
}
});
};
}
Rollen
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);
}
});
};
}
Diese Arbeiten wirklich gut. Leider, wenn ich versuche Privilegien zu holen von Benutzer Modell es id halten Einfügen statt ROLE_ID abzufragen.
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');
}
});
};
}
So am Ende, was ich tun, Bücherregal Abfrage wie folgt schafft:
privileges
select *,privileges_roles
..id
als_pivot_id
,privileges_roles
.role_id
als_pivot_role_id
,privileges_roles
.privilege_id
als_pivot_privilege_id
vonprivileges
innere Verbindungprivileges_roles
aufprivileges_roles
.privilege_id
=privileges
.id
woprivileges_roles
.role_id
in (1)
Statt role_id
in (3) wie es ist, in einem Datensatz abgerufen.