Oznámení
dibi, Postgres, boolean a checkbox
před 10 lety
- jtousek
- Člen | 956
Zdravím,
narazil jsem na drobný problém s databází PostrgeSQL. Typ boolean totiž vrací jako ‚f‘ a ‚t‘. Dibi to na boolean nepřetypuje a vrátí tak jak je.
Takto získaná data pomocí $form->setDefault($row);
(Nette)
dám do formuláře – jenže checkbox, který má v databázi ‚f‘, tedy
FALSE, je zaškrtnutý.
Lze toto opravit nějak obecně? Ideálně přímo aby dibi tato data správně přetypovalo anebo nastavit Postgres aby vracel normálně ‚TRUE‘ a ‚FALSE‘.
před 10 lety
- PetrP
- Člen | 587
https://forum.nette.org/…n-a-checkbox?…
David Grudl napsal(a):
Mělo by to jít udělat pomocí
$result->setType('polozka', Dibi::BOOL)
před 9 lety
- VeN
- Člen | 47
Ahoj,
narazil jsem na ten samý problém a přemýšlel nad tím, zda to je možné nějakým rozumným způsobem vyřešit na straně postgresql Dibi driveru a myslím, že ne. Znamenalo by to totiž jeden SQL dotaz navíc, protože nemůžeme každé „t“ a „f“ přetypovávat na boolean, protože to by u textových sloupečků nadělalo ještě více neplechy.
Takže asi zatím nelze doporučit lepší řešení, než s explicitním definovaním typu přes setType().
před 9 lety
- papo
- Člen | 3
Mozno by stacilo pouzit v postgrese pretypovanie na int „select true::int, false::int;“. Nulu uz berie php v booleane ako FALSE.
před 9 lety
- VeN
- Člen | 47
papo napsal(a):
Mozno by stacilo pouzit v postgrese pretypovanie na int „select true::int, false::int;“. Nulu uz berie php v booleane ako FALSE.
Problem je ale ten, že to stejně musíš řešit u každého dotazu zvlášť, což mi přijde skoro stejné, jako nastavit typ resultu, jak už bylo řečeno.
Ale jo, někomu to může stačit.
před 9 lety
- jtousek
- Člen | 956
Jo, myslím, že mi tohle přetypování trochu pomůže. :) Není to ideální, ale asi to bude stačit na dlouhodobé řešení. Díky.
před 9 lety
- David Grudl
- Nette Core | 6806
Taky lze použít automatické detekce typů – buď nad každým dotazem
zavolat detectTypes(), nebo v konfiguraci připojení uvést
'result' => array('detectTypes' => TRUE)
.