在加入中插入附加数据 table
Insert additional data in joining table
我正在用 express 构建一个应用程序,我正在使用 bookshelf (mysql) js 作为 ORM。
我有一个多对多的关系,我正在尝试在加入 table 中存储一些额外的数据。
我的模特:
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_factors' table 中的关系创建新产品。
/** 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' table
|ID|product_id|factor_id|quantity|
|--|----------|---------|--------|
|1 |10 |3 |NULL |
|2 |10 |5 |NULL |
如何在附加关系的同时插入数量?
文档在 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()
and withPivot()
方法来处理数据。
此外,由于您正在定义连接模型,因此您还可以直接使用它来访问和修改相关 table 包含的数据。例如:
Appointment.forge({patient_id: 2, doctor_id: 1, confirmed: true}).save()
或
Appointment.forge({id: 4}).destroy()
我正在用 express 构建一个应用程序,我正在使用 bookshelf (mysql) js 作为 ORM。 我有一个多对多的关系,我正在尝试在加入 table 中存储一些额外的数据。
我的模特:
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_factors' table 中的关系创建新产品。
/** 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' table
|ID|product_id|factor_id|quantity|
|--|----------|---------|--------|
|1 |10 |3 |NULL |
|2 |10 |5 |NULL |
如何在附加关系的同时插入数量?
文档在 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()
and withPivot()
方法来处理数据。
此外,由于您正在定义连接模型,因此您还可以直接使用它来访问和修改相关 table 包含的数据。例如:
Appointment.forge({patient_id: 2, doctor_id: 1, confirmed: true}).save()
或
Appointment.forge({id: 4}).destroy()