Obecnie nie ma możliwości wygenerowania modelu ze szczegółowymi atrybutami. Tutaj możesz sprawdzić odpowiedzialny kod. To całkiem czytelny kod. Łatwy do zrozumienia.
Zwykle po prostu generuję go z nazwą i bez pól, a następnie kopiuję i wklejam model do wygenerowanego pliku.
To jest model.
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 });
Uruchamiam sequelize-cli model:generate --name MyModel
i skopiuj i wklej cały obiekt parametru init bezpośrednio do wygenerowanego pliku. Tak:
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]
}
}
}
);
Oczywiście nie potrzebujemy tutaj walidacji, a także potrzebujemy dodatkowych pól, takich jak identyfikator i klucze obce, jeśli istnieje skojarzenie od jednego do wielu. Nie zapomnij dodać updatedAt i createdAt, jeśli zezwalasz sequelize na dodanie ich do instancji modelu.
Więc usuń walidację i dodaj pozostałe.
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'
}
}
);
W ten sposób udaje mi się tworzyć migracje z moich modeli. Niestety sequelize cli nie ma żadnych szczegółowych opcji generowania polecenia. Ale nie krępuj się dodać trochę! Wyciągnij go z github i popracuj nad nim. Byłoby miło mieć. Możesz również zautomatyzować ten opisany proces i dodać go jako kolejne polecenie do sekwencjonowania cli.