【问题标题】:BookshelfJS: How to define relationship with a foreign key other than IDBookshelfJS:如何定义与 ID 以外的外键的关系
【发布时间】:2026-02-23 20:45:01
【问题描述】:

我有两个表:devicesdiagnostics

diagnostic 在注册 device 之前运行。将有一个cpu_id 作为diagnostic 运行的一部分保存。然后device 注册后还会记录一个cpu_id

这是多对一的关系,这里的外键是chip_id

我为这两个表尝试了以下操作,但没有得到任何结果:

设备

diagnostics: function () {
    var Diagnostic = require('./db').model('Diagnostic');
    return this.hasMany(Diagnostic, 'chip_id');
}

诊断

device: function () {
    var Device = require('./config/db').model('Device');
    return this.belongsTo(Device, 'chip_id');
}

我做错了什么?

【问题讨论】:

  • 我想你想使用注册表插件,或者重新组织你的项目,以便你在同一个文件中定义你的模型,如果它们相互依赖的话。

标签: javascript sql node.js bookshelf.js


【解决方案1】:

你需要在模型中定义 hasMany 和 BelongsTo,然后你需要像这样检索你的关系

Book.where({id: 1}).fetch({withRelated: ['author']}).then(function(book) {
   console.log(JSON.stringify(book.related('author')));
});

使用 withRelated 标记您需要关系和执行预加载的相关函数

【讨论】:

  • 那行不通。我已经在我的问题中明确说明了这就是我所做的,但它不起作用。
  • 不,这是不同的,你需要将它插入模型中的hasmany(你可以找到搜索以bookshelf.Model.extend({)开头的东西你写的不是模型,您正在尝试访问其范围之外的方法
  • 这正是我所做的。上面的两个代码分别在DeviceDiagnostics的model里面。
最近更新 更多