Formuláře – načtení hodnoty pole z db do formulare

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
kall_ell
Člen | 13
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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)

Majkl578
Moderator | 1364
+
0
-

OOP se neuč na Nette, ale mimo!

Honza Kuchař
Člen | 1661
+
0
-

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
+
0
-

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ě :)