Doctrine Timestamp Error: SQL Server 2008 táblák importálása
SQL Server tábla importálása mezővel Timestamp a doktrínával? Amikor az oktatóanyagok itt-ott nem elegendőek, gyakran csak egy módon érheti el céljait... Mosd be a kezed! Ma egy olyan megoldást javaslok, amelyet remélem gyorsan integrál a Doctrine fejlesztéséért felelős közösség, amely lehetővé teszi Symfony2 entitások létrehozását egy SQL Server adatbázisból, amelyek tartalmaznak egy típusú mezőt. Timestamp.
Mi az időbélyeg típusa?
Szükségesnek tűnik megadni néhány apró információt az Időbélyeg típusáról. Nem vagyok MySQL szakértő, de az általam megismert információk alapján a MySQL időbélyegzője dátumnak tűnik, ami megkönnyíti a konvertálást. Az SQL Server esetében azonban ez a típus kissé finomabb a megértésében. A dokumentáció elérhető a Microsoft Techneten.
Olyan adattípus, amely automatikusan generált egykarakteres bináris számokat jelenít meg egy adatbázisban.
Érdekes… És hogyan mondjam meg a Doctrine-nak, hogy ne térítsen meg? Megoldást javaslok a probléma elterelésére...
Keressen „egyedi” megoldást
Már látom az üzeneteket, amelyek azt mondják, hogy már van egy kész módszer, amely működik. OUI! Sőt, ez a Symfony2 feladat nevezhető így:
php app/console doctrine:mapping:import
Ez a feladat jól működik, de ahogy itt olvastam, a Doctrine az adatbázis lehetséges leképezéseinek körülbelül 70-80%-ánál működik. Az én esetemben egy SQL Server (2008) tábla leképezését szerettem volna exportálni, amely egy híres TimeStamp mezőt tartalmazott. És a leképezések fennmaradó 20%-ában pontosan ilyen típusú mezők vannak.
Futtatom a parancsot, és megpróbálom importálni a mappaqe-t.
|
|
Az én esetemben két további lehetőséget kellett használnom, nevezetesen:
- –em=”…” meghatározni aEntitáskezelő az SQL Server adatbázisomért felelős;
- --filter=”tábla”. Ezt az opciót szerettem volna használni, amely működött a MariaDB-vel, de úgy tűnt, hogy figyelmen kívül hagyták az MSSQL-lel. Ezzel megadhatja az exportálandó táblázatot. Az én esetemben lemásoltam a BDD-met, töröltem azokat a táblázatokat, amelyek nem érdekeltek, és új profilt hoztam létreEntitáskezelő.
És itt van a kivétel:
|
|
Mostantól nekünk kell kockáznunk.
Az időbélyeg típus nem támogatott - és bevallom, nem igazán tudom, hogy milyen típusú PHP-mezőkkel társítsam - ideiglenesen megmondjuk a Doctrine-nak, hogy ezt a típust át kell alakítani dátum idő.
- Lépjen a faszerkezet által jelzett mappába, vendordoctrinedbalibDoctrineDBALPlatforms.
- Ebben a mappában találhatók azok az osztályok, amelyek támogatják a meglévő DBMS-ek többségét.
- Az én esetemben SQL Server 2008 R2-n dolgoztam, ezért szerkesztem a fájlt SQLServer2008Platform.php, de nyugodtan szerkeszthet egy másik fájlt, ha az megfelel a konfigurációnak.
- A módszert módosítani fogjuk inicializálja a DoctrineTypeMappings-t. Változóban doctrineTypeMapping bemutatja a típusok átalakításához szükséges információkat. Add hozzá a sort:
$this->doctrineTypeMapping['timestamp'] = 'dátumidő'; - Indítsa újra a leképezés importálását. Az összes mező leképezése importálva lett.
- Ne felejtse el eltávolítani a fájlhoz hozzáadott sort. Ha nem biztos benne, távolítsa el az összes szállítót, és telepítse újra.
- Most egymás után lépjen a létrehozott fájlokhoz. Mindegyik útvonala megjelenik, és viszont kövesse az alábbi jelzéseket.
- Most már rendelkezik a tábláinak megfelelővel XML-ben.
- Törölje az Időbélyeg típusú mezőnek megfelelő sorokat. Ily módon a Doctrine figyelmen kívül hagyja ezeket a mezőket.
- Egy kis óvintézkedés az SQL Serverrel kapcsolatban, hogy zárójeleket adjon az egy vagy több szóközt tartalmazó "oszlopban" szereplő minden egyes értékhez.
Ehhez a vonalhoz
Az SQL Server oszlop a „Saját információk”. A Doctrine nem tudja, hogyan kell kezelni a szóközöket MSSQL-lel. Tehát ehhez hasonló horgokat kell hozzáadnia:
- A fájlok javítása után elindítjuk az entitásgenerálást.
1php app/console doctrine:mapping:convert annotation ./src
Előfordulhat, hogy meg kell adnia a használni kívánt entitáskezelőt, például: –em=”…”.
- Most már törölheti a hozzárendelést, azaz az erőforrásokban található .xml fájlokat.
Ez az, most már a Doctrine által generált érvényes entitásaid vannak. Ez a megoldás, egy kicsit… „brian fasz”, mindaddig érvényes, amíg a Doctrine fejlesztéséért felelős csapat nem integrált olyan életképes megoldást, amely lehetővé tenné a TimeStamp típus natív támogatását a PHP-n belül.
Sok sikert és hamarosan találkozunk!