Mysql
 sql >> Database >  >> RDS >> Mysql

come impostare la lunghezza del tipo di data mysql con sequelize-cli

Attualmente non è possibile generare un modello con attributi dettagliati. Puoi controllare il codice responsabile qui. È un codice abbastanza chiaro. Facile da capire.

Di solito lo genero solo con il nome e senza campi e quindi copio e incollo il mio modello nel file generato.

Questo è il modello.

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

Eseguo sequelize-cli model:generate --name MyModel e copia incolla tutto l'oggetto parametro init direttamente all'interno del file generato. In questo modo:

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

Ovviamente non abbiamo bisogno di convalide qui e abbiamo anche bisogno di alcuni campi extra come ID e chiavi esterne se esiste un'associazione da una a molte. Non dimenticare di aggiungere updateAt e createAt se consenti a sequelize di aggiungerlo alla tua istanza del modello.

Quindi rimuovi convalida e aggiungi gli altri.

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

È così che riesco a creare le mie migrazioni dai miei modelli. Sfortunatamente, sequelize cli non ha opzioni dettagliate per generare il comando. Ma sentiti libero di aggiungerne un po'! Estrailo da github e lavoraci sopra. Sarebbe bello averlo. Puoi anche automatizzare questo processo descritto e aggiungerlo come un altro comando per seguire il cli.