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

Modifier l'exécution du nom de la table du modèle

Vous ne devez jamais stocker d'informations telles que des années en tant que noms de table depuis ses données. Vous devez les stocker en tant qu'entrées de tableau distinctes, en tant que données réellement utilisables.

Modifier company_historical_<year> à juste company_historical et créez une nouvelle table appelée company_historical_years qui a juste toutes les années possibles l'historique de la société entrées peuvent avoir.

Créez ensuite une relation entre l'historique de l'entreprise l'entrée et les années historiques de l'entreprise associées entrée.

Donc quelque chose comme :

var CompanyHistoricalYears = sequelize.define('company_historical_years', {
    year: {
        type: Sequelize.INTEGER
    },
    classMethods: {
        associate: function (models) {
            CompanyHistoricalYears.hasMany(models.CompanyHistorical);
        }
    }
};


var CompanyHistorical = sequelize.define('company_historical', {
    ...
    classMethods: {
        associate: function (models) {
            CompanyHistorical.belongsTo(models.CompanyHistoricalYears);
        }
    }
};

et ensuite vous pouvez l'interroger avec :

CompanyHistoricalYears.findOne({
    where: {
        year: 2011, // or you can use "new Date().getFullYear()"
    },
    include: [CompanyHistorical]
});

cela vous donnera un seul CompanyHistoricalYears entrée et tous les CompanyHistorical entrées qui sont dans cette année.

Si rien de tout cela n'a de sens, n'hésitez pas à commenter si vous avez des questions.