我有两个模型,book和author,具有多对多的关联。我最初实现它们都具有自动递增的整数id,但现在我想将它们都切换到UUID。我将UUID数据类型添加到关联中:
// models/book.js
const { Model } = require('sequelize')
module.exports = (sequelize, DataTypes) => {
class Book extends Model {
static associate(models) {
Book.belongsToMany(models.Author, {
as: 'authors',
through: 'BookAuthors',
foreignKey: {
allowNull: false,
name: 'bookId',
type: DataTypes.UUID
}
})
}
}
Book.init(
{
title: {
type: DataTypes.STRING,
allowNull: false
}
},
{
sequelize,
modelName: 'Book'
}
)
return Book
}
个字符
在设置数据库的迁移过程中,我将两个id属性都更改为:
id: {
allowNull: false,
defaultValue: Sequelize.UUIDV4,
primaryKey: true,
type: Sequelize.UUID
}
型
我不关心表中的数据,我已经删除了表并使用新代码重新创建了它,但是启动服务器失败,并出现以下错误:
第一个月
在执行语句时:CREATE TABLE IF NOT EXISTS "BookAuthors" ("createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, "updatedAt" TIMESTAMP WITH TIME ZONE NOT NULL, "authorId" INTEGER NOT NULL REFERENCES "Authors" ("id") ON DELETE CASCADE ON UPDATE CASCADE, "bookId" UUID NOT NULL REFERENCES "Books" ("id") ON DELETE CASCADE ON UPDATE CASCADE, PRIMARY KEY ("authorId","bookId"));
个
当然,关联表是由Sequelize在调用db.sequelize.sync()
时自动创建的。那么为什么它接受书籍的UUID,但不接受作者的UUID?
1条答案
按热度按时间6vl6ewon1#
您没有在模型中显式地指示PK,因为现在您希望使用默认DB类型(整数)之外的其他类型来定义它们:
图书型号:
字符串
作者型号:
型