如何使用联结表在bookshelf.js模型中定义关系?

时间:2017-10-03 18:20:17

标签: javascript bookshelf.js

我无法理解如何在书架模型中定义关系。

这是我的表的架构:

account table

+----+-------------+
| id |  username   |
+----+-------------+
| 30 | someuser    |
| 31 | anotheruser |
| 32 | dude        |
+----+-------------+

employee table

+----+-------------------+
| id |       email       |
+----+-------------------+
|  2 | some@one.com      |
|  3 | fake@employee.com |
+----+-------------------+

account_manager table

+----+------------+-------------+
| id | account_id | employee_id |
+----+------------+-------------+
|  1 |         30 |           2 |
|  2 |         31 |           3 |
|  3 |         32 |           3 |
+----+------------+-------------+

书架的文档有点难以理解,但这似乎应该做我想要的,但事实并非如此。

class Account extends Bookshelf.Model {

  manager() {
    return this.hasOne('Employee').through('AccountManager');
  }

}

class Employee extends Bookshelf.Model {

  accounts() {
    return this.hasMany('Account').through('AccountManager');
  }

}

class AccountManager extends Bookshelf.Model {

  account() {
    return this.hasOne('Account', 'id');
  }



  employee() {
    return this.hasMany('Employee', 'id');
  }

}

我希望能够做到这样的事情:

Account
.forge()
.fetch({ withRelated: ['manager'] })
.then((accounts) => { ... });

得到结果:

[
  {
    id: 30,
    username: 'someuser',
    manager: {
      id: 2,
      email: 'some@one.com',
    },
  },
  {
    id: 31,
    username: 'anotheruser',
    manager: {
      id: 3,
      email: 'fake@employee.com',
    },
  },
];

如何设置模型来执行此操作?看起来它应该非常简单,但我还没有找到一个很好的例子(显示模型中引用的SQL模式表会有很多帮助)定义与联结表的关系。任何例子都将不胜感激。

0 个答案:

没有答案