Ho bisogno di creare un’array di date per alimentare una select.
Al di là della correttezza progettuale del metodo da me adottato, quanto segue mi serve come “esercizio” nell’uso del metodo find che ha sostituito il generateList ormai deprecato.
Nella mia select vorrei avere un elenco di date, in formato italiano (d-m-Y), ordinate in ordine discendente, che rappresentano tutte le date utilizzate in una tabella nel campo ‘data’.
Una prima soluzione è quella di eseguire una normale query utilizzando il metodo $model->query().
$mylista = $this->$table->query("SELECT news.data, DATE_FORMAT(news.data , '%d-%m-%Y' ) AS `datait` FROM `news` GROUP BY `data` ORDER BY `data` DESC ");
In questo caso si dovrebbero utilizzare i nomi delle tabelle impiegate e non i nomi dei modelli.
La soluzione che utilizza il nome del model è la seguente.
$mylista = $this->$table->find('all',array('fields'=>array("DATE_FORMAT(data , '%d-%m-%Y' ) as datait",'data'),'order'=>'data DESC'));
$mylista è un array che contiene i dati cercati e è sufficente utilizzare combine per ottenre l’array desiderato.
$datelist = Set::combine($mylista,'{n}.News.data','{n}.0.datait');