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.