我正在使用express构建应用程序,我使用bookshelf(mysql)js作为ORM。 我有一个多对多关系,我试图在连接表中存储一些额外的数据。
我的模特:
const Product = Bookshelf.Model.extend({
tableName: 'products',
factors() {
return this.belongsToMany('Factor', 'product_factors', 'product_id', 'factor_id')
}
})
const Factor = Bookshelf.Model.extend({
tableName: 'factors',
products() {
return this.belongsToMany('Product')
}
})
在&product.dfactors'中创建具有关系的新产品表
/** Create product */
router.route('/').post((req, res) => {
new Product({name: req.body.name})
.save()
.then(product => {
// attaching relation
product.factors().attach([3, 5])
.then(hz => {
res.status(201).json({
message: 'Product created'
})
})
})
})
' product_factors'表
|ID|product_id|factor_id|quantity|
|--|----------|---------|--------|
|1 |10 |3 |NULL |
|2 |10 |5 |NULL |
如何在附加关系的同时插入数量?
答案 0 :(得分:1)
文档中有一个如何在the model.belongsToMany()
section中执行此操作的示例。为方便起见,这是:
let Doctor = bookshelf.Model.extend({
patients: function() {
return this.belongsToMany(Patient).through(Appointment);
}
});
let Appointment = bookshelf.Model.extend({
patient: function() {
return this.belongsTo(Patient);
},
doctor: function() {
return this.belongsTo(Doctor);
}
});
let Patient = bookshelf.Model.extend({
doctors: function() {
return this.belongsToMany(Doctor).through(Appointment);
}
});
正如您在Doctor
和Patient
模型中看到的那样,您必须使用.belongsToMany(Model).through(AnotherModel)
。然后,只需根据需要使用attach()
,detach()
,updatePivot()
和withPivot()
方法来处理数据。
此外,由于您正在定义加入模型,因此您还可以直接使用它来访问和修改相关表包含的数据。例如:
Appointment.forge({patient_id: 2, doctor_id: 1, confirmed: true}).save()
或
Appointment.forge({id: 4}).destroy()