DIBI – sloupec TIME a jeho zápis
- Šaman
- Člen | 2663
Ahoj. Řeším, jak pracovat s časem (bez datumu, jen denní čas) v Dibi.
V databázi je na to typ sloupce time
. Dibi mi z daného sloupce
vytvoří DateInterval.
Problém ale je, že tento DateInterval tam neumí zapsat. :-o
Dělám v LeanMapperu, takže potřebuji nějaký typ property, kterou lze
jak načíst, tak zapsat. Vzhledem k tomu, že Dibi vrací DateInterval,
naučil jsem entitu pracovat s ním, ale teď mi to odmítá zapisovat.
V query se objeví např:
monday_begin_from=**Unexpected DateInterval**
.
Tušíte někdo, jak z toho ven, aniž bych musel úplně odstranit typovou
kontrolu a pracovat jen se stringy?
(P.S. DateTime se mi taky nelíbí, protože obsahuje neplatnou indormaci
o datu. Ale už jsem z toho tak zoufalý, že kdybych to mohl přepsat na
DateTime a datum tiše ignorovat, asi bych to udělal. To teď ale není
možné, protože ORM od Dibi dostane DateInterval a do proprerty DateTime ho
samozřejmě odmítne zapsat.)
Dibi to dělá od verze 3.0: https://phpfashion.com/…exy-na-ceste
Editoval Šaman (29. 8. 2019 23:15)
- janpecha
- Backer | 75
Dost nepříjemný bug :-/
Pokud by ti stačilo, že místo DateInterval
budeš mít v
Row
stringy, tak by možná šlo udělat následující
(neověřoval jsem to):
- podědit si
LeanMapper\Connection
a přetížit metoducreateResultSet
- v metodě
createResultSet
nastavitResult
u vlastní callback dosetRowFactory
- v tom callbacku projet všechny hodnoty řádku a pokud narazíš na
DateInterval
tak tu hodnotu přeformátovat na string (případněDateTime
) - takhle upravené pole zabalit do
Dibi\Row
a vrátit - v entitě si pak můžeš tu hodnotu pomocí
passThru
přemapovávat ze stringu naDateInterval
a zpět