Náhrada PDO za NTDB v PHP bastl projektu – potřebuju fetch() bez normalizeRow
- H0w4rd
- Člen | 96
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
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.
- norbe
- Backer | 405
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)