Ho un problema con il nome di una tabella che deve poter cambiare in quando devo/voglio mantenere separati alcuni rilevamenti di anno in anno.
Il nome della tabella viene recuperato dal campo tableName. Ho un database che deve essere diviso di anno in anno quindi ho pensato di aggiungere l’anno al metodo tableName del model.
public function tableName() {
return 'ScaricoTempi' . date('Y');
}
Io però vorrei che fosse possibile selezionare l’anno, memorizzarlo nella session, quindi modificare al volo questo tableName. Vorrei provare con la soluzione del behavior. Non ne ho mai creato uno quindi chiedo il vostro supporto:
<?php
class CurrentYearBehavior extends CBehavior {
public function events() {
return array_merge(parent::events(), array(
'onBeginRequest' => 'beginRequest',
));
}
public function beginRequest() {
if ($this->owner->user->getState('currentYear'))
$this->owner->currentYear = $this->owner->user->getState('currentYear');
else
$this->owner->currentYear = date('Y');
}
}
Aggiungendo quel Behavior mi aspetto che ad ogni richiesta di pagina, venga caricato il parametro currentYear. E qui la domanda sorge spontanea: ho un limite di nomi, o posso inventarmi quelli che voglio? In ogni caso, andrei a recuperare questo valore al momento della richiesta dalla tabella:
public function tableName() {
return 'ScaricoTempi' . $this->owner->user->getState('applicationLanguage');
}
Così avrei risolto solo mezzo problema: ora come faccio a creare una tabella che non esiste quando serve?
CREATE TABLE IF NOT EXISTS `ScaricoTempi2011` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`id_collaborazione` int(11) NOT NULL,
`secondi` int(11) NOT NULL,
`data` date NOT NULL,
`note` text NOT NULL,
`orascarico` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`id_sotto_commessa` int(11) NOT NULL,
PRIMARY KEY (`id`)
);
Che mi suggerite?