Náhrada za funkciu generateList()
Funkcia generateList() patrila rozhodne k jednej z najužitočnejších a najpoužívanejších funkcií vôbec. V najnovšej verzii CakePHP ju však nenájdeme. Ako si poradiť bez nej, si ukážeme v tomto článku.
Táto šikovná funkcia získavala dáta z rôznych tabuliek pre ovládacie prvky typu select. Avšak v najnovšej verzii CakePHP túto funkciu už viac nenájdeme.
Ako náhrada nám odteraz slúži funkcia find, ktorú je potrebné volať s parametrom find(‚list‘)
/**
* Return a single row as a resultset array.
* By using the $recursive parameter, the call can access further "levels of association" than
* the ones this model is directly associated to.
*
* Eg: find(array('name' => 'mariano.iglesias'), array('name', 'email'), 'field3 DESC', 2);
*
* Also used to perform new-notation finds, where the first argument is type of find operation to perform
* (all / first / count), second parameter options for finding (indexed array, including: 'conditions', 'limit',
* 'recursive', 'page', 'fields', 'offset', 'order')
*
* Eg: find('all', array(
* 'conditions' => array('name' => 'mariano.iglesias'),
* 'fields' => array('name', 'email'),
* 'order' => 'field3 DESC',
* 'recursive' => 2));
*
* @param array $conditions SQL conditions array, or type of find operation (all / first / count)
* @param mixed $fields Either a single string of a field name, or an array of field names, or options for matching
* @param string $order SQL ORDER BY conditions (e.g. "price DESC" or "name ASC")
* @param integer $recursive The number of levels deep to fetch associated records
* @return array Array of records
* @access public
*/
function find($conditions = null, $fields = array(), $order = null, $recursive = null) {
S problémami sa môžete stretnúť vtedy, keď budete funkciu volať nad tabuľkou, ktorá nemá stĺpec nazvaný name. Funkciu generateList() ste v takomto prípade mohli volať s parametrami keyPath a valuePath a dať tak funkcii najavo, čo je vo vašej tabuľke kľúč a čo hodnota pre daný kľúč. Problém je v tom, že tieto parametre funkcia find nemá. Disponuje však parametrom fields, do ktorého budeme môcť v budúcnosti zadať, čo je v našej tabuľke kľúč a čo je hodnota kľúča, v súčasnosti to nie je možné a táto chyba je už nahlásená.
Tento problém môžete vyriešiť jednoducho pridaním nasledovného kódu do vášho modelu spojeného s tabuľkou, z ktorej sa select generuje
var $displayField = "valuePath";
var $primaryKey = "keyPath";
Potom nám stačí funkciu find volať bežným spôsobom a príslušný select prvok sa bude generovať správne.
Za jednoduché riešenie ďakujem Jankovi
Súvisiace články
-
Kategórie
- Tipy a triky (28)
- Články (8)
- Fantom CMS (4)
- Zábava (2)
- Začíname s CakePHP (6)
-
Najčítanejšie články
-
Novinky
-
Seriál o CakePHP na www.debug.sk
15. 10. 2008
Od 7. októbra vychádza nový seriál o CakePHP na serveri zameranom na programovanie s názvom Debug.sk Autorom seriálu je autor tohto webu a kto by mal záujem, môžete daný seriál podporiť jeho prečítaním.
-
-
Nálepky
-
Nedávne komentáre
-
Rss kanály

Komentáre k článku
Nový komentár
Titulok: Nenajdeme?
Autor: Hrach
Vytvorený: 25. 02. 2008 13:43
fakt nenajdeme??? možná není api čerstvé, ale co toto? Api cakephp
Titulok: RE: Nenajdeme?
Autor: Tibor
Vytvorený: 25. 02. 2008 13:55
Skus ju pouzit vo svojom kode a zapni si debug
A dostanes nasledovnu hlasku
Takze je jasne, ze sa s danou metodou v buducnosti nepocita a prave preto tento clanok.