Nette\Database\Table\ResultSet DateTime:__contruct(‚infinity‘)
- RenatMagadiev
- Člen | 2
Zdravím,
narazil jsem na problém s funkcí normalizeRow(). Jde o to, že se při
fetchování zavolá tato funkce, která jak na ní koukám tak se stará o to
aby se podle datového typu všechny sloupečky správně neinicializovali. Je
to velice pěkná vlastnost, ale jelikož si u větve FIELD_DATETIME,
FIELD_DATE a FIELD_TIME snaží nainitnout Nette\DateTime, který je při
constructu zavolá phpkovské DateTime nastane problém jedná-li se o sloupec
obsahující infinity hodnotu (tuto hodnota se využívá pro práci se
smazanými daty a jejich srovnávání při hodnotě NULL se nedá použít
porovnání s NOW()). Takže jestli existuje nějaký způsob nahradit
Nette\Database\Table\ResultSet nebo Nette\DateTime? A jestli by bylo nějaké
hezčí řešení budu jen rád. Jinak vím, že se dá použít výhybka
v dotazu IF infinity THEN… ale je celkem zdlouhavé a nehezké kvůli této
nedokonalosti frameworku pořád myslet na to, že může být hodnota infinity
nebo selectovat všechny sloupce kromě deleted. Budu velice rád za všechny
nápady a předem za ně děkuji.
- Majkl578
- Moderator | 1364
Infinity není platné
datum (logicky). Docela by mě zajímalo, jak jsi takovou hodnotu nacpal do
datetime sloupečku.
Správné řešení je použít NULL nebo další boolean sloupeček. Teoreticky
bys mohl použít i nějaké datum v daleké budoucnosti.
kvůli této nedokonalosti frameworku
Heheh, spíš bych řekl, kvůli špatnému návrhu databáze.
- RenatMagadiev
- Člen | 2
Tak jak vidím, tak to chce projasnit to, že jde o PostgreSQL databázi a datový typ timestamp with time zone, který už v sobě má hodnotu infinity.
Budu se opakovat, ale správné řešení není použít NULL (NULL není timestamp a tedy na něj neplatí jakákoliv porovnávací operátory a funkce databáze.) Ve firmě je to dlouho používané řešení a je v hodně ohledech lepší než složité a nepraktické řešení přes Vámi zmiňované bool sloupečky.
Děkuji za Vaší reakci, ale přeci jen bych zůstal u otázky jak mám tuto nepřipravenost Nette ORM na tento datový typ a všechny jeho možnosti. Byl bych rád, kdyby mi někdo poradil jak můžu framework v tomto ohledu rozšířit a případně tento případ nějak odchytit a předat upravený. Předem děkuji za všechny nabídnuté možnosti řešení
Editoval RenatMagadiev (25. 8. 2014 20:34)