tiny ‘n’ smart
database layer

Odkazy: dibi | API reference

Oznámení

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

Dibi\Row a DateTime vs Dibi\DateTime

před 3 lety

jan-kratochvil
Člen | 14

Ahoj, upgradoval jsem dibi na 3× a mám problém, že mi Dibi\Row vrací DateTime místo původního Dibi\DateTime. Nevíte proč to tak je? Změnil jsem i ovladač z odbc na sqlsrv.

Díky za nápady.

před 3 lety

jan-kratochvil
Člen | 14

pokud udělám fetch tak to vypadá nádledovně:

object(Dibi\Row)#13 (4) {
  ["user_jmeno"]=>
  string(3) "Jan"
  ["user_prijmeni"]=>
  string(11) "Kratochvíl"
  ["user_dat_nar"]=>
  object(DateTime)#11 (3) {
    ["date"]=>
    string(26) "1977-01-26 00:00:00.000000"
    ["timezone_type"]=>
    int(3)
    ["timezone"]=>
    string(13) "Europe/Berlin"
  }
  ["user_dat_reg_tk"]=>
  object(DateTime)#12 (3) {
    ["date"]=>
    string(26) "2013-05-01 00:00:00.000000"
    ["timezone_type"]=>
    int(3)
    ["timezone"]=>
    string(13) "Europe/Berlin"
  }
}

pokud udělám echo, tedy chci využít tostring, tak mě to nejde, přitom dibi\DateTime metodu tostring má..
Catchable fatal error: Object of class DateTime could not be converted to string

Editoval jan-kratochvil (5. 10. 2016 15:44)

před 3 lety

jan-kratochvil
Člen | 14

Koukal jsem ještě do kódu a zjistil, že o tohle se stará funkce normalize() v class Result a samozřejmě vypadá OK. Nemůžu nějak blbě používat namespace?

před 3 lety

David Grudl
Nette Core | 6806

Jsou tam na to i testy, takže netuším v čem by mohl být problém.

před 3 lety

jan-kratochvil
Člen | 14

Tak problémů je nakonec víc, kdyby to někdo řešil…

Prvotně, problém se týká přímo toho ovladače sqlsrv (já kompiloval nativní ovladač od MS pro linux), který vrací ve funkcích fetch datum rovnou jako DateTime, toho se musí člověk zbavit nastavením parametru ‚ReturnDatesAsStrings‘=>true při connectu. Dále funkce sqlsrv_field_metadata vrací nějká divná čísla dle číselníku MS (https://msdn.microsoft.com/…c296197.aspx) která se musí přeložit na textové hodnoty.Ty potom ten type hinter v Dibi už vezme a funguje to perfektně.

Davide díky.