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

Modifica il runtime del nome della tabella del modello

Non dovresti mai memorizzare alcun tipo di informazione come anni come nomi di tabelle dai suoi dati. Dovresti salvarli come voci di tabella separate, come dati effettivamente utilizzabili.

Modifica company_historical_<year> solo a company_historical e crea una nuova tabella chiamata company_historical_years che ha solo tutti gli anni possibili il Company Historical le voci possono avere.

Quindi crea una relazione tra la Cronologia società voce e i relativi Anni Storici Aziendali voce.

Quindi qualcosa come:

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

e poi puoi interrogarlo con:

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

questo ti darà un singolo CompanyHistoricalYears entry e tutto il CompanyHistorical voci che rientrano in quell'anno.

Se ciò non ha senso, sentiti libero di commentare con qualsiasi domanda.