Mysql
 sql >> Datenbank >  >> RDS >> Mysql

wie man mysql datetype length mit sequelize-cli festlegt

Derzeit gibt es keine Option zum Generieren von Modellen mit detaillierten Attributen. Sie können den verantwortlichen Code hier überprüfen. Es ist ziemlich klarer Code. Leicht verständlich.

Normalerweise generiere ich es einfach mit Namen und ohne Felder und kopiere dann mein Modell in die generierte Datei.

Dies ist das Modell.

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 });

Ich führe sequelize-cli model:generate --name MyModel aus und fügen Sie alle Init-Parameterobjekte direkt in die generierte Datei ein. So:

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]
            }
        }
    }
);

Natürlich brauchen wir hier keine Validierungen und wir brauchen auch einige zusätzliche Felder wie ID und Fremdschlüssel, wenn es eine zu viele Assoziation gibt. Vergessen Sie nicht, updatedAt und createdAt hinzuzufügen, wenn Sie sequelize erlauben, es zu Ihrer Modellinstanz hinzuzufügen.

Entfernen Sie also validate und fügen Sie die anderen hinzu.

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'
        }
    }
);

So schaffe ich es, meine Migrationen aus meinen Modellen zu erstellen. Leider hat sequelize cli keine detaillierten Optionen für den Befehl generate. Aber zögern Sie nicht, einige hinzuzufügen! Ziehen Sie es von github und arbeiten Sie daran. Wäre schön zu haben. Sie können diesen beschriebenen Prozess auch automatisieren und als weiteren Befehl hinzufügen, um cli zu squelisieren.