Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

como definir o comprimento do tipo de data do mysql com sequelize-cli


Atualmente não há opção de gerar modelo com atributos detalhados. Você pode verificar o código responsável aqui. É um código bastante claro. Fácil de entender.

Eu costumo gerá-lo com nome e sem campos e, em seguida, copie e cole meu modelo no arquivo gerado.

Este é o modelo.
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 });

Eu corro sequelize-cli model:generate --name MyModel e copie e cole todo o objeto de parâmetro init diretamente dentro do arquivo gerado. Assim:
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]
            }
        }
    }
);

Claro que não precisamos de validações aqui e também precisamos de alguns campos extras como Id e chaves estrangeiras se houver associação de um para muitos. Não se esqueça de adicionar updatedAt e createdAt se você permitir que o sequelize o adicione à sua instância de modelo.

Então remova valide e adicione os outros.
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'
        }
    }
);

É assim que consigo criar minhas migrações a partir dos meus modelos. Infelizmente, sequelize cli não possui opções detalhadas para o comando generate. Mas fique à vontade para adicionar alguns! Puxe-o do github e trabalhe nele. Seria bom ter. Você também pode automatizar esse processo descrito e adicioná-lo como outro comando para sequenciar o cli.