Mysql 在联接表中插入附加数据

Mysql 在联接表中插入附加数据,mysql,node.js,express,knex.js,bookshelf.js,Mysql,Node.js,Express,Knex.js,Bookshelf.js,我正在用express构建一个应用程序,并使用bookshelf(mysql)js作为ORM。 我有一个多对多的关系,我试图在连接表中存储一些额外的数据 我的模型: const Product = Bookshelf.Model.extend({ tableName: 'products', factors() { return this.belongsToMany('Factor', 'product_factors', 'product_id', 'facto

我正在用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')
    }

})
在“产品系数”表中创建具有关系的新产品

    /** 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'
                        })
                    })
            })

    })
“产品系数”表

|ID|product_id|factor_id|quantity|
|--|----------|---------|--------|
|1 |10        |3        |NULL    |
|2 |10        |5        |NULL    |

如何在附加关系的同时插入数量?

文档中有一个示例说明如何在中插入数量。为方便起见,这里是:

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);
  }
});
正如您在
医生
患者
模型中所看到的,您必须使用
.belongstomy(Model).through(AnotherModel)
。然后,只需使用所需的方法来处理数据

此外,由于您正在定义联接模型,所以也可以直接使用它来访问和修改相关表包含的数据。例如:

Appointment.forge({patient_id: 2, doctor_id: 1, confirmed: true}).save()

Appointment.forge({id: 4}).destroy()