Formuláře – načtení hodnoty pole z db do formulare
- kall_ell
- Člen | 13
Ahoj, stále moc nechápu komunikaci mezi presenterem a modelem. Potřeboval udělat fomulář se polem select s tím, že položky selectu budou vybrány z DB. Mám vytvořený jednoduchý model(ale nevím jestli správně):
class Vyhledat extends DigiRow {
public function vyhledatDestinace() {
return dibi::query("SELECT [destinace] FROM [seznam] GROUP BY destinace", $offset
) ->execute() -> setRowClass('vyhledat');
}
}
v Presenteru mám definovaný formulář s $form->addSelect(‚destinace‘, ‚destinace:‘, $this->Vyhledat);, ale poslední parametr je špatně. jak mám docílit toho aby mě dosadil do toho třetího parametru vysledek modelu? Jak se mám v presenteru odkazovat na metodu „vyhledatDestinace“ v modulu Vyhledat?
- Majkl578
- Moderator | 1364
Za předpokladu, že $this->Vyhledat instanceof Vyhledat
by
šlo $this->Vyhledat->vyhledatDestinace()
. Pak už tam
(nejspíš do metody v modelu) zabudovat fetch dat.
EDIT: Teď koukám, že tvůj kód je nesmyslný. Udělej model s dotazem na databázi, fetchnutím dat a výše popsaným navrácením do aplikace.
Editoval Majkl578 (15. 3. 2010 16:25)
- kall_ell
- Člen | 13
ten model jsem upravil následovně
class Vyhledat{
public function vyhledatDestinace() {
$res = dibi::query("SELECT [destinace] FROM [seznam_zajezdu] GROUP BY [destinace]");
return $res->fetchAll();
}
v presenteru mám tohle
public function createComponentVyhledani(){
$form = new AppForm();
$form->addSelect('destinace', 'destinace:', $this->model->vyhledatDestinace());
$form->addSubmit('hledat', 'Hledat');
$form->onSubmit[] = callback($this, 'procesVyhledat');
return $form;
}
nette mě vyhodí následující hlášku: Object of class DibiRow could not be converted to string. Tak teď nevím. Podle mě by měl modul vrátit pole s výsledkem(seznamem), ten chci dosadit do formuláře. Ale ten podle té chyby hlásí, že to není pole, jestli to dobře chápu. Co mám špatně?
- iguana007
- Člen | 970
zkus toto:
class Vyhledat{
public function vyhledatDestinace() {
return dibi::fetchPairs("SELECT id,destinace FROM [seznam_zajezdu] GROUP BY [destinace]");
}
EDIT: mel bys vybirat 2 sloupecky v dotazu, aby si udelal pary – tj. aby pri vystupu vzniklo:
<option value="PRVNIHODNOTA">DRUHAHODNOTA</option>
… o spravny vystup se ti postara prave ta metoda fetchPairs.
Editoval iguana007 (18. 3. 2010 12:29)
- kall_ell
- Člen | 13
super, dík tohle funguje. Jsem z toho zatím hodně mimo, moc to nechápu. OOP jsem nepoúžíval, takže v tom teď docela plavu. Budu se asi hodně ptát, tak se mnou lidičky mějte strpení.
Ale ještě bych měl přece jenom dotaz, nechci znát ID záznamu v DB, potřebuji, aby se mě po odeslání vrátil název destinace. Pokud použiju tento způsob, value každé položky selectu je ID ke kterému se vztahuje.
Editoval kall_ell (18. 3. 2010 18:43)
- Honza Kuchař
- Člen | 1662
kall_ell napsal(a):
super, dík tohle funguje. Jsem z toho zatím hodně mimo, moc to nechápu. OOP jsem nepoúžíval, takže v tom teď docela plavu. Budu se asi hodně ptát, tak se mnou lidičky mějte strpení.
Taky jsem s Nette začínal a neměl jsem základy OOP. (přečetl jsem si toto: http://php.interval.cz/…i-oop-v-php/ ) A vidíš jde to…
- iguana007
- Člen | 970
honzakuchar napsal(a):
kall_ell napsal(a):
super, dík tohle funguje. Jsem z toho zatím hodně mimo, moc to nechápu. OOP jsem nepoúžíval, takže v tom teď docela plavu. Budu se asi hodně ptát, tak se mnou lidičky mějte strpení.
Taky jsem s Nette začínal a neměl jsem základy OOP. (přečetl jsem si toto: http://php.interval.cz/…i-oop-v-php/ ) A vidíš jde to…
Já byl na tom podobně :)