Náhrada za deprecated metodu fetchField()
- gizer
- Člen | 67
Zdravím,
chtěl jsem se zeptat jakým způsobem mohu nahradit deprecated metodu fetchField(). Použil jsem ji v továrně na formuláře při načítání hodnot z databáze ve funkci setDefaultValue(). Vše perfektně funguje i v Nette v3. Pouze je tato metoda už zastaralá a nevím čím ji nahradit.
//část kódu z továrny na formuláře
$form->addText('a11', 'a11:')
->setDefaultValue($this->database->table('mapa')->fetchField('a11'));
Děkuji moc za případnou radu.
- ForestCZE
- Člen | 209
gizer napsal(a):
Zdravím,
chtěl jsem se zeptat jakým způsobem mohu nahradit deprecated metodu fetchField(). Použil jsem ji v továrně na formuláře při načítání hodnot z databáze ve funkci setDefaultValue(). Vše perfektně funguje i v Nette v3. Pouze je tato metoda už zastaralá a nevím čím ji nahradit.
//část kódu z továrny na formuláře $form->addText('a11', 'a11:') ->setDefaultValue($this->database->table('mapa')->fetchField('a11'));
Děkuji moc za případnou radu.
Ahoj, zkus fetch
- Kamil Valenta
- Člen | 822
Není dobré po fetch() přímo sahat na sloupec, protože ta Selectiona nemusí vrátit žádný záznam.
- Kamil Valenta
- Člen | 822
Spíš by mne zajímalo, proč je fetchField deprecated, protože ona testovala, zda výsledek dotazu není false. Také tu metodu dost používám a povede mě to k tomu, že si ji ve stejném duchu napíšu sám…
- David Grudl
- Nette Core | 8239
Deprecated je pouze argument ve fetchField(), volání bez argumentu (tj. vrácení hodnoty z prvního sloupce) normálně funguje.
- gizer
- Člen | 67
Díky moc,
ten zápis fetch()->a11 taky funguje stejně jako fetchfield(‚a11‘).
Zadával jsem předtím a11 jako argument stejně u fetchfield. Jsem prostě
začátečník. Nevím akorát proč kamil_v tvrdí, že není dobré po
fetch() přímo sahat na sloupec a že to nemusí vrátit žádný záznam?
Existuje snad ještě i lepší řešení, jak si sáhnout přímo na
konkrétní sloupec v DB tabulce?
Každopádně ještě jednou moc děkuji za radu.
- Martk
- Člen | 661
Protože to vede k chybám, když nebudeš mít záznam. PHP vygeneruje notice zprávu a hodnota bude null.
$test = null;
var_dump($test->a11);
Proč nepoužiješ to co napsal David? Když chceš fetchnout jen jeden sloupec, tak budeš mít v selectu jen jeden sloupec a vrátí ti to co ve starší verzi.
SELECT a11 FROM ...
a pak
$row->fetchField();
Editoval Martk (15. 4. 2020 18:29)
- Kamil Valenta
- Člen | 822
gizer napsal(a):
Nevím akorát proč kamil_v tvrdí, že není dobré po fetch() přímo sahat na sloupec a že to nemusí vrátit žádný záznam?
Zkus si:
$db->table('name')->where('1 = 1')->fetch()->col;
vs.
$db->table('name')->where('1 = 0')->fetch()->col;
V prvním případě se Tě vrátí ActivRow, nad kterým zavoláš
$row->col;
Ve druhém případě fetch() vrátí false, a při pokusu o vyhodnocení
false->col to úplně nedopadne.
Do where samozřejmě může vstoupit parametr a ty dopředu nevíš, zda db vrátí nějaký záznam, nebo ne…