首页 > 解决方案 > Sequelize:声明了外键,但没有出现在表中

问题描述

我是新手,Sequelize为此我严格遵循此处的文档。上面写着我们必须使用hasOne(), hasMany(),belongsTo()才能自动添加外键。在我的情况下:我有一个类别和一个常见问题解答模型,定义如下:

类别.js

const { Sequelize } = require('sequelize');
const sequelize = require('../database/connection');

const Category = sequelize.define('Category', {
    id: {
        type: Sequelize.DataTypes.INTEGER,
        allowNull: false,
        autoIncrement: true,
        primaryKey: true
    },
    categoryShop_id: {
        type: Sequelize.DataTypes.UUID,
        allowNull: true
    },
    name: {
        type: Sequelize.DataTypes.STRING,
        allowNull: false
    },
    active: {
        type: Sequelize.DataTypes.BOOLEAN,
        allowNull: false,
        defaultValue: true
    },
    parent_id: {
        type: Sequelize.DataTypes.INTEGER,
        allowNull: true
    }
});

Category.associate = (models) => {
    Category.hasMany(models.faqs, {
        onDelete:'CASCADE',
        onUpdate:'CASCADE'
    });
};

module.exports = Category;

常见问题解答.js

const { Sequelize } = require('sequelize');
const sequelize = require('../database/connection');

const Faq = sequelize.define('Faq', {
    id: {
        type: Sequelize.DataTypes.INTEGER,
        allowNull: false,
        autoIncrement: true,
        primaryKey: true
    },
    question: {
        type: Sequelize.DataTypes.TEXT,
        allowNull: false
    },
    answer: {
        type: Sequelize.DataTypes.TEXT,
        allowNull: false
    },
    product_id: {
        type: Sequelize.DataTypes.STRING,
        allowNull: true
    },
    active: {
        type: Sequelize.DataTypes.BOOLEAN,
        allowNull: false,
        defaultValue: true
    }
});

Faq.associate = (models) => {
    Faq.belongsTo(models.categories, {
        foreignKey: {
            name: 'category_id',
            allowNull: true
        }
    });
};

module.exports = Faq;

迁移运行没有任何错误,但我没有看到表中添加的列。这是什么原因?

标签: javascriptmysqlnode.jssequelize.js

解决方案


您令人困惑的模型和迁移代码。您的迁移没问题,但缺少适合您的关联的外键列。

您的关联代码看起来不错,但它属于您的模型。

查看https://sequelizeui.app/以获取一些示例代码。


推荐阅读