Choď na navigáciu
Nálepky: CakePHP

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

Povedz o článku aj ostatným - www.pridej.cz

Hodnotenie článku: 36%
Počet hodnotení: 52

zlýdobrý

Komentáre k článku

Nový komentár

  1. Titulok: Nenajdeme?
    Autor: Hrach
    Vytvorený: 25. 02. 2008 13:43

    fakt nenajdeme??? možná není api čerstvé, ale co toto? Api cakephp

  2. Titulok: RE: Nenajdeme?
    Autor: Tibor
    Vytvorený: 25. 02. 2008 13:55

    Skus ju pouzit vo svojom kode a zapni si debug

    Configure::write('debug', 2);

    A dostanes nasledovnu hlasku

    (Model::generateList) Deprecated, use Model::find("list") or Model::find("all") and Set::combine()

    Takze je jasne, ze sa s danou metodou v buducnosti nepocita a prave preto tento clanok.