2017-01-29 2 views
0

Я сражаюсь с отношениями внутри моей книжной модели. То, что я пытаюсь сделать, это создать схему, которая содержит 4 таблицы:Bookshelf.js принадлежит запросу с неправильным столбцом

  • пользователей
  • роли
  • привилегии
  • 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); 
      } 
     }); 
    }; 
} 

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

Эти работы действительно прекрасные. К сожалению, когда я пытаюсь принести привилегии от пользователя модели это держать вставив идентификатор вместо 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, где privileges_roles. role_id в (1)

Вместо role_id в (3), как это в записи неправдоподобным.

ответ

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'); 
      } 
Смежные вопросы