Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Alterar o tempo de execução do nome da tabela do modelo


Você nunca deve armazenar qualquer tipo de informação como anos como nomes de tabelas desde seus dados. Você deve armazená-los como entradas de tabela separadas, como dados utilizáveis ​​reais.

Alterar company_historical_<year> para apenas company_historical e crie uma nova tabela chamada company_historical_years que tem apenas todos os anos possíveis do Histórico da Empresa entradas podem ter.

Em seguida, crie um relacionamento entre o Histórico da empresa entrada e os Anos históricos da empresa relacionados entrada.

Então algo como:
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 então você pode consultá-lo com:
CompanyHistoricalYears.findOne({
    where: {
        year: 2011, // or you can use "new Date().getFullYear()"
    },
    include: [CompanyHistorical]
});

isso lhe dará um único CompanyHistoricalYears entrada e todos os CompanyHistorical entradas que estão dentro desse ano.

Se nada disso fizer sentido, sinta-se à vontade para comentar com qualquer dúvida.