DIBI – sloupec TIME a jeho zápis

Šaman
Člen | 2635
+
0
-

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
+
0
-

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 metodu createResultSet
  • v metodě createResultSet nastavit Resultu vlastní callback do setRowFactory
  • 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 na DateInterval a zpět