Náhrada PDO za NTDB v PHP bastl projektu – potřebuju fetch() bez normalizeRow

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
H0w4rd
Člen | 96
+
0
-

Dělám na jednom PHP bastl projektu, který naštěstí používá PDO a tak se mi do něj celkem snadno podařilo dát Tracy a projekt překvapivě funguje.

Ale ne bez problémů. Na různých místech dochází k tomu, že se předpokládá string, ale on je tam DateTime, protože v databázi je typ date a nebo DateInterval, když je v databázi time.

Takže příkaz substr($radek[‚work_from‘], 0, –3) hodí warning, že argument není string, ale objekt.

Je nesmyslitelné, abych všechno procházel a opravoval to.

Potřebuju, když mám ResultSet a udělám nad ním fetch(), aby se neprováděla normalizace. Koukal jsem na metodu fetch(), provádí se tam $this->normalizeRow($data), ve kterém se právě převede string na DateTime mimo jiné a to bych potřeboval zrušit.

Jak na to? Nebo máte nějaký alternativní nápad?

H0w4rd
Člen | 96
+
+1
-

Tak jsem to nějak vymyslel sám.

Třídu Nette\Database\Connection jsem si oddědil a přepsal metodu query() – místo ResultSet se tam vytváří můj resultset.

Třídu Nette\Database\ResultSet jsem prakticky celou zkopíroval, protože tam spousta věcí byla private a v metodě normalizeRow jsem zakomentoval tu část, která převádí data a časy na objekty.

A zdá se, že je to ok. Ještě to v budoucnu vymyslím nějak lépe, abych v novějších částech aplikace i ty \DateTime a \DateInterval mohl používat.

CZechBoY
Člen | 3608
+
0
-

Bych si mozna spis udelal vlastni driver (vychazejici z treba nette mysql driveru) a poresil jen ty typy.

norbe
Backer | 405
+
0
-

Dle mého stačí upravit obsah Nette\Database\Helpers::$typePatterns tak jak potřebuješ. V tvém případě tedy nahradit za prázdné pole či unsetnout klíče pro datum/čas..

Editoval norbe (31. 10. 2016 7:37)