Nette\Forms – naplnění selectu

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

Zdravím,

Mám menší problémek. Mám v db uložené nějaké data – dejme tomu, že uživatele.
Dále mám formulář a v něm mám jeden select box. No a do něj potřebuji naplnit všechny uživatele z db.
SQL dotaz proběhne v poho…

$users = dibi::fetchAll("SELECT jmeno FROM users");

$usersForm->addSelect('users','Výběr :',$users);

Do nedávna vše fungovalo, ale v poslední revizi mi aplikace háže chybu, že $users jsou objekt. Což jsem si i ve foru o dibi našel. Nicméně stále se mi nedaří naplnit onen select.

Zkoušel jsem ještě experimenty s DibiTable a dopadl jsem podobně :(

Za každou radu dík

TanisCZ
Člen | 80
+
0
-

Tak jsem se snažil celou dokumentaci pořádně pročíst a v jednom příspěvku jsem našel od Davida informaci, že Fetch vrací už jen objekt, který by se měl zároveň chovat jako pole. Jak ale přinutit select, tak aby vzal data z Fetch.

Pořád mi to hlási nejrůznější chybky typu : Argument 3 passed to FormContainer::addSelect() must be an array, object given

Jak z toho ven? :-( Je to pro mě v téhle fázi celkem důležité

romansklenar
Člen | 655
+
0
-

Nepomohlo ani přetypování?

$usersForm->addSelect('users', 'Výběr :', array($users));
TanisCZ
Člen | 80
+
0
-

Také jsem už zkoušel dostanu chybu : Warning: Object of class users could not be converted to string :/
Pokud zkousim pretypovani na array($user->jmeno) dostanu : Trying to get property of non-object

Editoval TanisCZ (21. 10. 2008 12:05)

TanisCZ
Člen | 80
+
0
-

Jediné co mě napadlo je celý ten fetch přes foreach projít a každou tu položku zapsat do pole, které si předem připravím. Ale přijde mi to jako škrábání se levou nohou za pravým uchem…

A ještě dodám, že se staršíma revizema příklad fungoval v pořádku

Takže se mi podařil další posun.

array($user['1']->jmeno,$user['2']->jmeno) atd.. tak se mi daři jednotlivé položky vypisovat…

Editoval TanisCZ (21. 10. 2008 12:21)

David Grudl
Nette Core | 8218
+
0
-

Měl bys místo fetchAll() použít fetchPairs().

phx
Člen | 651
+
0
-

Jen tak mimo: pretypovava se takto: (array) $row a ne array($row)

TanisCZ
Člen | 80
+
0
-

Díky moc! FetchPair je opravdu mocná funkce a teď jen lituji, že jsem o ni nevěděl mnohem dřív. Díky moc.
Ještě otázka je možné FetchPair používat i nějakým způsobem u DibiTable?A doporučuje autor používat DibiTable a nebo je pořád spíš jen v epxerimentální podobě?

Každopádně moc moc dík .)