Doctrine TimeStamp Błąd: Importuj tabele SQL Server 2008
Agencja internetowa » Wiadomości cyfrowe » Doctrine TimeStamp Błąd: Importuj tabele SQL Server 2008

Doctrine TimeStamp Błąd: Importuj tabele SQL Server 2008

Jak zaimportować tabelę SQL Server z polem Sygnatura czasu z Doktryną? Kiedy samouczki tu i tam nie wystarczają, często istnieje tylko jeden sposób na osiągnięcie celu... Ubrudz sobie ręce! Dzisiaj proponuję rozwiązanie, które mam nadzieję zostanie szybko zintegrowane przez społeczność odpowiedzialną za rozwój Doctrine, które pozwala na tworzenie encji Symfony2 z bazy danych SQL Server zawierających pole typu Sygnatura czasu.

Jaki jest typ znacznika czasu?

Wydaje mi się konieczne podanie kilku drobnych informacji na temat typu Timestamp. Nie jestem ekspertem od MySQL, ale z informacji, na które się natknąłem, znacznik czasu MySQL wygląda jak data, co ułatwia konwersję. Jednak ten sam typ dla SQL Server jest nieco bardziej subtelny w zrozumieniu. Dokumentacja jest dostępna w witrynie Microsoft Technet.

Typ danych, który ujawnia automatycznie generowane jednoznakowe liczby binarne w bazie danych.
Ciekawe… A jak mam powiedzieć Doctrine, żeby mnie nie nawracała? Proponuję rozwiązanie problemu...

Znajdź „niestandardowe” rozwiązanie

Już widzę nadchodzące wiadomości z informacją, że istnieje już gotowa metoda, która działa. TAK! Co więcej, to zadanie Symfony2 można wywołać w ten sposób:

doktryna aplikacji/konsoli php: mapowanie: import
To zadanie działa dobrze, ale jak czytam tutaj, Doctrine działa dla około 70-80% możliwych mapowań w bazie danych. W moim przypadku chciałem wyeksportować mapowanie tabeli SQL Server (2008), która zawierała słynne pole TimeStamp. A w pozostałych 20% odwzorowań występują właśnie tego typu pola.

Uruchomię polecenie i spróbuję zaimportować plik mappaqe.

1
doktryna aplikacji/konsoli php: mapowanie: import — wymuś NamespaceNameBundle xml

W moim przypadku musiałem skorzystać z dwóch dodatkowych opcji, a mianowicie:

  1. –em=”…” określićMenedżer podmiotu odpowiedzialny za moją bazę danych SQL Server;
  2. --filter=”tabela”. Chciałem użyć tej opcji, która działała z MariaDB, ale wydawała się być ignorowana, gdy jest używana z MSSQL. Pozwala to określić tabelę do wyeksportowania. W moim przypadku skopiowałem moje BDD, usunąłem tabele, które mnie nie interesowały i utworzyłem nowy profilMenedżer podmiotu.
    A oto zgłoszony wyjątek:
1
2
[DoktrynaDBALDBALEWyjątek]
Nieznana baza danych rodzaj zażądano znacznika czasu, DoctrineDBALPlatformsSQLServer2008Platform może go nie obsługiwać.

Od teraz będziemy musieli ustawiać kości.
Typ znacznika czasu nie jest obsługiwany — i przyznaję, że tak naprawdę nie wiem, z jakim typem pól PHP go powiązać — tymczasowo poinformujemy Doctrine, że ten typ musi zostać przekonwertowany data i godzina.

  • Przejdź do folderu wskazanego przez strukturę drzewa, vendordoctrinedbalibDoctrineDBALPlatforms.
  • W tym folderze znajdują się klasy obsługujące większość istniejących DBMS.
  • W moim przypadku pracowałem na SQL Server 2008 R2, więc edytuję plik SQLServer2008Platforma.php, ale możesz edytować inny plik, jeśli pasuje do Twojej konfiguracji.
  • Edytujemy metodę zainicjuj odwzorowania typów Doctrine. w zmiennej mapowanie typu doktryny zawiera informacje do konwersji typów. Dodaj linię:
    $this->doctrineTypeMapping['timestamp'] = 'datetime';
  • Uruchom ponownie import mapowania. Mapowanie wszystkich pól zostało zaimportowane.
  • Musisz pamiętać, aby usunąć linię dodaną do pliku. Jeśli nie masz pewności, usuń wszystkich dostawców i zainstaluj ich ponownie.
  • Teraz przejdź kolejno do plików, które zostały wygenerowane. Ścieżka każdego z nich jest wskazana, a następnie postępuj zgodnie ze wskazówkami poniżej.
    • Masz teraz odpowiednik swoich tabel w XML.
    • Usuń wiersze odpowiadające polu typu TimeStamp. W ten sposób Doctrine zignoruje te pola.
    • Małym środkiem ostrożności w SQL Server jest dodanie nawiasów wokół każdej wartości zawartej w „kolumnie” mającej jedną lub więcej spacji.
      Dla tej linii

      Kolumna programu SQL Server to „Moje informacje”. Doctrine nie wie, jak obsługiwać spacje za pomocą MSSQL. Musisz więc dodać haczyki w ten sposób:
  • Gdy Twoje pliki zostaną poprawione, uruchamiamy generowanie jednostek.
    1
    doktryna aplikacji/konsoli php: mapowanie: konwersja adnotacji ./src

Może być konieczne określenie Menedżera jednostek do użycia, na przykład: –em=”…”.

  • Możesz teraz usunąć mapowanie, czyli pliki .xml znajdujące się w Zasobach.
    To wszystko, masz teraz prawidłowe byty wygenerowane przez Doctrine. To rozwiązanie trochę… „brian fuck” jest poprawne, dopóki zespół odpowiedzialny za rozwój Doctrine nie zintegrował realnego rozwiązania, które pozwoliłoby na natywną obsługę typu TimeStamp w PHP.

Powodzenia i do zobaczenia wkrótce!

★ ★ ★ ★ ★