模型和迁移之间的重复数据

Wiz*_*zix 5 node.js sequelize.js

我正在学习 Sequelize,我发现有些东西很奇怪,所以我认为我做错了什么。

这是我对一个简单Posts表的迁移:

'use strict';
module.exports = {
    up: (queryInterface, Sequelize) => {
        return queryInterface.createTable('Posts', {
            id: {
                allowNull: false,
                autoIncrement: true,
                primaryKey: true,
                type: Sequelize.INTEGER
            },
            title: {
                type: Sequelize.STRING,
                allowNull: false,
            },
            content: {
                type: Sequelize.TEXT,
                allowNull: false,
            },
            authorId: {
                type: Sequelize.INTEGER,
                onDelete: 'CASCADE',
                allowNull: false,
                references: {model: 'Users', key: 'id'}
            },
            publishedAt: {
                type: Sequelize.DATE,
                allowNull: true
            },
            createdAt: {
                allowNull: false,
                type: Sequelize.DATE
            },
            updatedAt: {
                allowNull: false,
                type: Sequelize.DATE
            }
        });
    },
    down: (queryInterface, Sequelize) => {
        return queryInterface.dropTable('Posts');
    }
};
Run Code Online (Sandbox Code Playgroud)

这里还有一个小问题,allowNull: false如果我不希望它们为空,我是否必须指定标题和内容。我想是的,但我看到的许多项目都没有具体说明。

这是Post模型:

'use strict';
module.exports = (sequelize, DataTypes) => {
    const Post = sequelize.define('Post', {
        id: {
            allowNull: false,
            autoIncrement: true,
            primaryKey: true,
            type: DataTypes.INTEGER
        },
        title: {
            type: DataTypes.STRING,
            allowNull: false,
        },
        content: {
            type: DataTypes.TEXT,
            allowNull: false,
        },
        publishedAt: {
            type: DataTypes.DATE,
            allowNull: true
        },
    }, {
        classMethods: {
            associate: function (models) {
                Post.belongsTo(models.User, {
                    onDelete: 'CASCADE',
                    foreignKey: {
                        fieldName: 'authorId',
                        allowNull: false
                    }
                });
            }
        }
    });

    return Post;
};
Run Code Online (Sandbox Code Playgroud)

我在文件之间重复了相同的数据......我来自 Laravel,所以也许在 NodeJS 世界中做这样的事情很常见。

Atu*_*dav 1

是的,目前您必须将字段定义从模型复制到其各自的迁移,这确实不是构建应用程序的好方法。

但是,有一个包可以自动从您的模型生成迁移,您可以在这里查看: https: //github.com/flexxnn/sequelize-auto-migrations,但它还处于早期阶段。

您还可以在此处阅读有关同一主题的讨论:https ://github.com/sequelize/cli/issues/257