Node.js / Bookshelf - 映射模型,其中表中的多个列引用另一个表的ID

时间:2017-05-05 11:43:27

标签: javascript node.js model bookshelf.js

我将node.js与bookshelf一起用作ORM。我是这项技术的新手。

我有一种情况,我在数据库表中有几列。出于这个问题,这些列应命名为'sold_by_id','signed_off_by_id'和'lead_developer_id',并且都是将引用带有ID的User表的列。

换句话说,系统中的不同用户在任何时候都会与三个不同的角色相关联,而不一定是唯一的。

展望未来,我需要能够以下列方式检索信息:

let soldByLastName = JobTicket.soldBy.get('last_name');

我试过四处寻找并阅读文档,但我仍然非常不确定如何实现这一目标。显然下面的内容不起作用,我知道第二个参数是针对目标表的,但它说明了我想要实现的概念。

// JobTicket.js
soldBy: function() {
    return this.belongsTo(User, 'sold_by_id');
},

signedOffBy: function() {
    return this.belongsTo(User, 'signed_off_by_id');
},

leadDeveloper: function() {
    return this.belongsTo(User, 'lead_developer_id');
}

显然我需要在User.js

中使用一组相应的方法

我不知道从哪里开始,有人能指出我正确的方向吗?

或者我只是一个白痴? ^ _ ^

1 个答案:

答案 0 :(得分:0)

您的定义看起来正确。对于使用它们,它将类似于:

new JobTicket({ id: 33 })
  .fetch({ withRelated: [ 'soldBy', 'signedOffBy' ] })
  .then(jobTicket => {
    console.log(jobTicket.related('soldBy').get('last_name');
  });

除此之外,我建议您使用Registry插件来引用其他模型。这减轻了引用尚未加载的模型的痛苦。