如何使用 sequelize-cli 设置 mysql 日期类型长度

how to set mysql datetype length with sequelize-cli

sequelize/CLI 版本:“sequelize-cli”:“^6.2.0”,“sequelize”:“^6.3.3”

我正在使用它生成一个 mysql 用户 table

npx sequelize-cli model:generate --name User --attributes firstName:string,lastName:string,email:string

期望使用 sequelize-cli 生成具有长度的属性

firstName:DataTypes.STRING(20) // model with length

npx sequelize-cli model:generate --name User --attributes firstName:string // how to add length with cli?

通过文档和源码都没有找到,这个不用了吧?拜托,有人知道这里发生了什么吗?

目前没有生成具有详细属性的模型的选项。 You can check the responsible code here. 这是非常清晰的代码。通俗易懂。

我通常只使用名称生成它,没有字段,然后将我的模型复制粘贴到生成的文件中。

这是模型。

class MyModel extends Sequelize.Model { }
MyModel.init({
    name: {
        type: Sequelize.DataTypes.STRING(100),
        allowNull: false,
        validate: {
            notNull: true,
            notEmpty: true,
            len: [2, 100]
        }
    },
    description: {
        type: Sequelize.DataTypes.STRING(5000),
        allowNull: false,
        validate: {
            notNull: true,
            notEmpty: true,
            len: [100, 5000]
        }
    }
}, { sequelize: sequelizeInstance });

I 运行 sequelize-cli model:generate --name MyModel 并将所有初始化参数对象直接复制粘贴到生成的文件中。像这样:

queryInterface.createTable(
    'MyModel',
    {
        name: {
            type: Sequelize.DataTypes.STRING(100),
            allowNull: false,
            validate: {
                notNull: true,
                notEmpty: true,
                len: [2, 100]
            }
        },
        description: {
            type: Sequelize.DataTypes.STRING(5000),
            allowNull: false,
            validate: {
                notNull: true,
                notEmpty: true,
                len: [100, 5000]
            }
        }
    }
);

当然我们在这里不需要验证,如果存在一对多关联,我们还需要一些额外的字段,如 Id 和外键。如果您允许 sequelize 将其添加到您的模型实例,请不要忘记添加 updatedAt 和 createdAt。

所以删除验证并添加其他的。

queryInterface.createTable(
    'MyModel',
    {
        id: {
            type: Sequelize.DataTypes.INTEGER,
            primaryKey: true,
            autoIncrement: true
        },
        name: {
            type: Sequelize.DataTypes.STRING(100),
            allowNull: false
        },
        description: {
            type: Sequelize.DataTypes.STRING(5000),
            allowNull: false
        },
        createdAt: {
            type: Sequelize.DataTypes.DATE,
            allowNull: false,
        },
        updatedAt: {
            type: Sequelize.DataTypes.DATE,
            allowNull: false,
        },
        MyOtherModelId: {
            type: Sequelize.DataTypes.INTEGER,
            allowNull: false,
            references: {
                model: 'MyOtherModel'
            },
            onUpdate: 'cascade',
            onDelete: 'restrict'
        }
    }
);

这就是我设法从我的模型创建迁移的方式。不幸的是,sequelize cli 没有生成命令的任何详细选项。但请随意添加一些!从 github 中提取并处理它。会很高兴。您还可以自动执行此描述的过程并将其添加为另一个命令以对 cli 进行续集。