tiny ‘n’ smart
database layer

Odkazy: dibi | API reference

Oznámení

Omlouváme se, provoz fóra byl ukončen

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).