Chyba časovej pečiatky doktríny: Importujte tabuľky SQL Server 2008
Ako importovať tabuľku servera SQL Server s poľom Timestamp s Doktrínou? Keď tu a tam návody nestačia, často existuje len jeden spôsob, ako dosiahnuť svoj cieľ... Zašpinite si ruky! Dnes navrhujem riešenie, ktoré dúfam rýchlo integruje komunita zodpovedná za vývoj doktríny, ktorá umožňuje vytvárať entity Symfony2 z databázy SQL Server, ktoré obsahujú pole typu Timestamp.
Aký je typ časovej pečiatky?
Zdá sa mi potrebné uviesť niekoľko malých informácií o type časovej pečiatky. Nie som odborník na MySQL, ale z informácií, s ktorými som sa stretol, časová pečiatka MySQL vyzerá ako dátum, čo uľahčuje konverziu. Rovnaký typ pre SQL Server je však v chápaní o niečo jemnejší. Dokumentácia je dostupná na Microsoft Technet.
Dátový typ, ktorý odhaľuje automaticky generované jednoznakové binárne čísla v databáze.
Zaujímavé... A ako poviem Doctrine, aby ma nekonvertovala? Navrhujem riešenie na odvrátenie problému...
Nájdite „vlastné“ riešenie
Už vidím prichádzajúce správy, ktoré mi hovoria, že už existuje hotová metóda, ktorá funguje. ÁNO ! Navyše je to úloha Symfony2, ktorú možno nazvať týmto spôsobom:
php app/console doctrine:mapping:import
Táto úloha funguje dobre, ale ako som tu čítal, Doctrine funguje asi na 70-80% možných mapovaní v databáze. V mojom prípade som chcel exportovať mapovanie tabuľky SQL Server (2008), ktorá obsahovala známe pole TimeStamp. A vo zvyšných 20% mapovaní sú presne tieto typy polí.
Spustím príkaz a pokúsim sa importovať mappaqe.
|
|
V mojom prípade som musel použiť dve ďalšie možnosti, a to:
- –em=”…” špecifikovaťSprávca entity mám na starosti moju databázu SQL Server;
- --filter=”tabuľka”. Chcel som použiť túto možnosť, ktorá fungovala s MariaDB, ale zdalo sa, že bola ignorovaná pri použití s MSSQL. To vám umožní špecifikovať tabuľku na export. V mojom prípade som skopíroval svoj BDD, vymazal som tabuľky, ktoré ma nezaujímali a vytvoril som nový profilSprávca entity.
A tu je uvedená výnimka:
|
|
Odteraz budeme musieť kocky vybaviť.
Typ Timestamp nie je podporovaný – a priznám sa, že naozaj neviem, s akým typom PHP polí ho mám spojiť – dočasne povieme Doctrine, že tento typ je potrebné previesť Dátum Čas.
- Prejdite do priečinka označeného stromovou štruktúrou, vendordoctrinedbalibDoctrineDBALPplatformy.
- V tomto priečinku sú triedy, ktoré podporujú väčšinu existujúcich DBMS.
- V mojom prípade som pracoval na SQL Server 2008 R2, takže som súbor upravil SQLServer2008Platform.php, ale pokojne upravte aj iný súbor, ak sa zhoduje s vašou konfiguráciou.
- Spôsob upravíme initializeDoctrineTypeMappings. Vo variabilnom doctrineTypeMapping sú prítomné informácie na konverziu typov. Pridajte riadok:
$this->doctrineTypeMapping['timestamp'] = 'dátum a čas'; - Reštartujte import máp. Mapovanie všetkých polí bolo importované.
- Nezabudnite odstrániť riadok, ktorý ste pridali do súboru. Ak si nie ste istí, odstráňte všetkých predajcov a znova ich nainštalujte.
- Teraz prejdite postupne na súbory, ktoré boli vygenerované. Cesta každého z nich je označená a postupujte podľa pokynov nižšie.
- Teraz máte ekvivalent svojich tabuliek v XML.
- Odstráňte riadky, ktoré zodpovedajú poľu typu Časová pečiatka. Týmto spôsobom bude Doctrine tieto polia ignorovať.
- Malým opatrením pri SQL Serveri je pridať hranaté zátvorky okolo každej hodnoty obsiahnutej v „stĺpci“ s jednou alebo viacerými medzerami.
Pre tento riadok,
Stĺpec SQL Server je "Moje informácie". Doctrine nevie, ako zaobchádzať s priestormi pomocou MSSQL. Takže musíte pridať háčiky takto:
- Keď budú vaše súbory opravené, spustíme generovanie entít.
1php app/console doctrine:mapping:convert anotation ./src
Možno budete musieť špecifikovať Správcu entít, ktorý sa má použiť, takto: –em=”…”.
- Teraz môžete odstrániť mapovanie, t. j. súbory .xml nachádzajúce sa v zdrojoch.
To je všetko, teraz máte platné entity vygenerované Doctrine. Toto riešenie trochu... „brian fuck“ je platné, pokiaľ tím zodpovedný za vývoj Doctrine neintegruje životaschopné riešenie, ktoré by umožnilo natívne podporovať typ TimeStamp v rámci PHP.
Veľa šťastia a čoskoro sa uvidíme!