在同一迁移文件中添加列和外键约束

问题描述 投票:0回答:2

这是我当前的迁移

向上:异步(queryInterface,Sequelize)=> {

return Promise.all([
    queryInterface.addColumn(
    'carts',
    'user_id',
    {
        type: Sequelize.INTEGER,
        allowNull: false
    }
    ).then(() => {
        queryInterface.addConstraint('carts', {
        fields: ['user_id'],
        type: 'foreign key',
        name: 'cart_user_id_fkey',
        references: {
            table: 'users',
            field: 'user_id'
        }   
    })
    })
])
/**
 * Add altering commands here.
 *
 * Example:
 * await queryInterface.createTable('users', { id: Sequelize.INTEGER });
 */

},

我首先添加列,然后将约束添加到表中。当我运行这个时,我收到此错误:

(节点:7106)未经处理的promisreeptiondwarning:sequelizeForeignKeyConstrainTerror:无法添加或更新子行:forefer键约束失败(

bazaah
.
#sql-5c24_1325d
,约束
cart_user_id_fkey
forefer toursem tofern foright foright forefer键(
user_id
)参考(
users
))

为什么在添加列后尝试添加约束失败?

node.js sequelize.js
2个回答
1
投票
您无法添加没有任何默认值的非空字段。您可以指定一个默认值,也可以将其设为可为空,直到您在所有记录中填写此字段为止。

user_id
就您而言,我不知道应该使用什么值作为默认值,因此您唯一的选择就是使其可为空。


0
投票
id:{ 允许空:假, 自动增量:真, 主键:true, 类型:Sequelize.INTEGER }, 用户身份: { 允许空:假, 类型:Sequelize.INTEGER, 参考: { 模型:“用户”, 键:“id” } }, 英雄ID:{ 允许空:假, 类型:Sequelize.INTEGER, 参考: { 型号:《英雄》, 键:“id” } }, 匹配: { 允许空:假, 类型:Sequelize.INTEGER }, 地位: { 允许空:假, 类型:Sequelize.STRING }, 创建于:{ 允许空:假, 类型:Sequelize.DATE }, 更新时间:{ 允许空:假, 类型:Sequelize.DATE } });

© www.soinside.com 2019 - 2024. All rights reserved.