我在我的项目中使用Sequelize。这是两个模型:
const User = db.define('user', {
name: Sequelize.STRING,
password: Sequelize.STRING
})
const Product = db.define('product', {
name: Sequelize.STRING,
price: Sequelize.INTEGER
})
现在,用户可以购买产品,并且我具有如下所示的关联设置:
Product.belongsToMany(User, {through: 'UserProducts'})
User.belongsToMany(Product, {through: 'UserProducts'})
我也有带有其他列的UserProducts表。
const UserProducts = db.define('UserProducts', {
status: Sequelize.STRING
})
Sequelize创建一个包含userId和productId组合的组合键,并且只允许包含userId和productId组合的一条记录。因此,例如,userId 2和productId 14。
这对我来说是个问题,因为有时人们想多次购买。我需要以下方案之一才能工作:
status
,以便唯一 key 是这三个的组合。 我确实想使用关联,因为它们提供了许多强大的方法,但是我想更改唯一键以使其能够以用户ID和产品ID相同的组合添加多行的方式来工作。
并且由于我的模型/数据库已经在运行,因此我将需要使用迁移来进行此更改。
对此的任何帮助都将受到高度赞赏。
最佳答案
由于在UserProducts
表中还具有其他属性,因此需要为UserProducts
定义模型,然后告诉续集使用该模型,而不是创建自己的模型
class User extends Model {}
User.init({
name: Sequelize.STRING,
password: Sequelize.STRING
}, { sequelize })
class Product extends Model {}
ProjProductect.init({
name: Sequelize.STRING,
price: Sequelize.INTEGER
}, { sequelize })
class UserProducts extends Model {}
UserProducts.init({
id: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true
},
status: DataTypes.STRING
}, { sequelize })
User.belongsToMany(Project, { through: UserProducts })
Product.belongsToMany(User, { through: UserProducts })
引用:Sequelize v4 belongsToMany
更新
由于您正在使用v3,并且已经为
UserProducts
表创建了模型,因此请使用以下代码段UserProducts = db.define('UserProducts', {
id: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true
},
status: DataTypes.STRING
})