sql-server - 在 MS SQL 下使用关联迁移时的问题
问题描述
我在运行时遇到问题:sequelize db:migrate
在 MS SQL 下。我有一个contact
模型,还有belongsTo
2 个其他模型。所以我将这个添加到contact.associate = function(models)
函数中:
contact.belongsTo(models.job)
contact.belongsTo(models.customer)
联系人模型的迁移如下所示:
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
...
jobId: {
type: Sequelize.INTEGER,
references: {
model: "jobs",
key: "id"
}
},
customerId: {
type: Sequelize.INTEGER,
references: {
model: "customers",
key: "id"
}
},
我试图与模型关联的contact
模型被命名为:job
和customer
,它们的表:jobs
和使用标志customers
运行时遇到的错误:--debug
== 20181201143147-create-productionstep: migrating =======
ERROR: SequelizeDatabaseError: Could not create constraint or index. See
previous errors.
at Query.formatError (C:\Users\Jan\Documents\navigatemNode\node_modules\sequelize\lib\dialects\mssql\query.js:315:12)
at Request.connection.lib.Request [as userCallback] (C:\Users\Jan\Documents\navigatemNode\node_modules\sequelize\lib\dialects\mssql\query.js:107:25)
at Request._this.callback (C:\Users\Jan\Documents\navigatemNode\node_modules\tedious\lib\request.js:60:27)
at Connection.endOfMessageMarkerReceived (C:\Users\Jan\Documents\navigatemNode\node_modules\tedious\lib\connection.js:1922:20)
at Connection.dispatchEvent (C:\Users\Jan\Documents\navigatemNode\node_modules\tedious\lib\connection.js:1004:38)
at Parser.<anonymous> (C:\Users\Jan\Documents\navigatemNode\node_modules\tedious\lib\connection.js:805:18)
at emitOne (events.js:116:13)
at Parser.emit (events.js:211:7)
at Parser.<anonymous> (C:\Users\Jan\Documents\navigatemNode\node_modules\tedious\lib\token\token-stream-parser.js:54:15)
at emitOne (events.js:116:13)
at Parser.emit (events.js:211:7)
at addChunk (C:\Users\Jan\Documents\navigatemNode\node_modules\readable-stream\lib\_stream_readable.js:291:12)
at readableAddChunk (C:\Users\Jan\Documents\navigatemNode\node_modules\readable-stream\lib\_stream_readable.js:278:11)
at Parser.Readable.push (C:\Users\Jan\Documents\navigatemNode\node_modules\readable-stream\lib\_stream_readable.js:245:10)
at Parser.Transform.push (C:\Users\Jan\Documents\navigatemNode\node_modules\readable-stream\lib\_stream_transform.js:148:32)
at Parser.afterTransform (C:\Users\Jan\Documents\navigatemNode\node_modules\readable-stream\lib\_stream_transform.js:91:10)
at Parser._transform (C:\Users\Jan\Documents\navigatemNode\node_modules\tedious\lib\token\stream-parser.js:69:9)
at Parser.Transform._read (C:\Users\Jan\Documents\navigatemNode\node_modules\readable-stream\lib\_stream_transform.js:184:10)
at Parser.Transform._write (C:\Users\Jan\Documents\navigatemNode\node_modules\readable-stream\lib\_stream_transform.js:172:83)
at doWrite (C:\Users\Jan\Documents\navigatemNode\node_modules\readable-stream\lib\_stream_writable.js:428:64)
at writeOrBuffer (C:\Users\Jan\Documents\navigatemNode\node_modules\readable-stream\lib\_stream_writable.js:417:5)
at Parser.Writable.write (C:\Users\Jan\Documents\navigatemNode\node_modules\readable-stream\lib\_stream_writable.js:334:11)
at Parser.addEndOfMessageMarker (C:\Users\Jan\Documents\navigatemNode\node_modules\tedious\lib\token\token-stream-parser.js:80:26)
at Connection.message (C:\Users\Jan\Documents\navigatemNode\node_modules\tedious\lib\connection.js:1913:32)
at Connection.dispatchEvent (C:\Users\Jan\Documents\navigatemNode\node_modules\tedious\lib\connection.js:1004:38)
at MessageIO.<anonymous> (C:\Users\Jan\Documents\navigatemNode\node_modules\tedious\lib\connection.js:884:18)
at emitNone (events.js:106:13)
at MessageIO.emit (events.js:208:7)
没有标志:
ERROR: Could not create constraint or index. See previous errors.
没有记录以前的错误。
我已经检查了 和 表的 PrimaryKey
是否customers
已命名,jobs
并且id
这些表是在数据库中创建的,但它再次失败并出现相同的错误jobId
customerId
解决方案
好的,我已经通过为外键创建单独的迁移来解决问题:
up: (queryInterface, Sequelize) => {
return queryInterface.addColumn(
'contacts',
'jobId',
{
type: Sequelize.INTEGER,
references: {
model: "jobs",
key: "id"
},
onDelete: 'SET NULL'
},
)
.then(() => {
return queryInterface.addColumn(
'contacts',
'customerId',
{
type: Sequelize.INTEGER,
references: {
model: "customers",
key: "id"
},
onDelete: 'SET NULL'
}
)
})
},
down: (queryInterface, Sequelize) => {
return queryInterface.removeColumn(
'contacts',
'jobId',
)
.then(() => {
return queryInterface.removeColumn(
'contacts',
'customerId',
)
})
}
推荐阅读
- assembly - movzx 和 cwd - 它们可以互换吗?
- r - 计算固定效应 logit 的混淆矩阵
- c - SDL2 不呈现多个视口
- c# - ADFS 与 SAML2.0 WebSSO 协议。签名认证失败
- php - 按类别查看产品中的 WooCommerce 星级评分(古腾堡块)
- javascript - Jquery比较用复选框选择的表行并比较列
- powershell - 比较一个文件的文件大小的脚本
- python - 如何合并两个具有几乎相同元素的 json
- ruby - 在 Ruby 中,您可以将指向节点的点存储在哈希中以供以后替换
- excel - 如何在不更改格式的情况下使用 VBA 对值进行排序?