Mysql
 sql >> Base de données >  >> RDS >> Mysql

comment définir la longueur du type de date mysql avec sequelize-cli

Actuellement, il n'y a pas d'option pour générer un modèle avec des attributs détaillés. Vous pouvez vérifier le code responsable ici. C'est un code assez clair. Facile à comprendre.

En général, je le génère simplement avec un nom et aucun champ, puis je copie-colle mon modèle dans le fichier généré.

C'est le modèle.

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

Je lance sequelize-cli model:generate --name MyModel et copiez-collez tout l'objet de paramètre init directement dans le fichier généré. Comme ceci :

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

Bien sûr, nous n'avons pas besoin de validations ici et nous avons également besoin de champs supplémentaires comme l'identifiant et les clés étrangères s'il y a une association un à plusieurs. N'oubliez pas d'ajouter updatedAt et createdAt si vous autorisez sequelize à l'ajouter à votre instance de modèle.

Alors supprimez validez et ajoutez les autres.

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

C'est ainsi que j'arrive à créer mes migrations à partir de mes modèles. Malheureusement, sequelize cli n'a pas d'options détaillées pour la commande generate. Mais n'hésitez pas à en ajouter ! Tirez-le de github et travaillez dessus. Ce serait bien d'avoir. Vous pouvez également automatiser ce processus décrit et l'ajouter en tant qu'autre commande pour séquencer cli.