Napaka Doctrine TimeStamp: uvozite tabele SQL Server 2008
Spletna agencija » Digitalne novice » Napaka Doctrine TimeStamp: uvozite tabele SQL Server 2008

Napaka Doctrine TimeStamp: uvozite tabele SQL Server 2008

Kako uvoziti tabelo SQL Server s poljem Timestamp z doktrino? Ko vaje tu in tam niso dovolj, je pogosto samo en način za dosego vaših ciljev ... Umaži si roke! Danes predlagam rešitev, za katero upam, da jo bo hitro integrirala Skupnost, zadolžena za razvoj Doctrine, ki omogoča ustvarjanje entitet Symfony2 iz baze podatkov SQL Server, ki vsebuje polje tipa Timestamp.

Kaj je vrsta časovnega žiga?

Zdi se mi potrebno določiti nekaj majhnih informacij o vrsti časovnega žiga. Nisem strokovnjak za MySQL, a glede na informacije, na katere sem naletel, je časovni žig MySQL videti kot datum, kar olajša pretvorbo. Vendar pa je ista vrsta za SQL Server nekoliko bolj subtilna v svojem razumevanju. Dokumentacija je na voljo na Microsoft Technet.

Podatkovni tip, ki izpostavlja samodejno ustvarjena enomestna binarna števila v bazi podatkov.
Zanimivo… In kako naj povem Nauku, naj me ne spreobrne? Predlagam rešitev za preusmeritev problema...

Poiščite rešitev "po meri".

Že vidim, da prihajajo sporočila, ki mi sporočajo, da že obstaja pripravljena metoda, ki deluje. DA! Poleg tega je to opravilo Symfony2 mogoče poklicati na ta način:

php app/console doctrine:mapping:import
Ta naloga deluje dobro, toda kot sem prebral tukaj, Doctrine deluje za približno 70–80 % možnih preslikav v bazi podatkov. V mojem primeru sem želel izvoziti preslikavo tabele SQL Server (2008), ki je vsebovala znano polje TimeStamp. In v preostalih 20% preslikav so natanko te vrste polj.

Zagnal bom ukaz in poskusil uvoziti mappaqe.

1
php app/console doctrine:mapping:import —force NamespaceNameBundle xml

V mojem primeru sem moral uporabiti dve dodatni možnosti, in sicer:

  1. –em=”…” določitiVodja entitete odgovoren za mojo bazo podatkov SQL Server;
  2. --filter=”tabela”. Želel sem uporabiti to možnost, ki je delovala z MariaDB, vendar se je zdelo, da je bila pri uporabi z MSSQL prezrta. To vam omogoča, da določite tabelo za izvoz. V mojem primeru sem kopiral svoj BDD, izbrisal sem tabele, ki me niso zanimale, in ustvaril nov profilVodja entitete.
    In tukaj je postavljena izjema:
1
2
[DoctrineDBALDBALException]
Neznana zbirka podatkov tip zahtevan časovni žig, DoctrineDBALPlatformsSQLServer2008Platform tega morda ne podpira.

Od zdaj naprej bomo morali kocko zlagati.
Vrsta časovnega žiga ni podprta - in priznam, da res ne vem, s katero vrsto PHP polj naj jo povežem - začasno bomo sporočili Doctrine, da je treba to vrsto pretvoriti Datum čas.

  • Pojdite v mapo, označeno z drevesno strukturo, vendordoctrinedbalibDoctrineDBALPlatforms.
  • V tej mapi so razredi za podporo večine obstoječih DBMS.
  • V mojem primeru sem delal na SQL Server 2008 R2, zato sem uredil datoteko SQLServer2008Platform.php, vendar lahko uredite drugo datoteko, če se ujema z vašo konfiguracijo.
  • Metodo bomo uredili initializeDoctrineTypeMappings. V spremenljivki doktrinaTypeMapping vsebuje informacije za pretvorbo vrst. Dodajte vrstico:
    $this->doctrineTypeMapping['timestamp'] = 'datetime';
  • Znova zaženite uvoz preslikav. Preslikava vseh polj je bila uvožena.
  • Ne pozabite odstraniti vrstice, ki ste jo dodali v datoteko. Če niste prepričani, odstranite vse prodajalce in jih znova namestite.
  • Zdaj pojdite zaporedno na datoteke, ki so bile ustvarjene. Navedena je pot vsakega in po vrsti sledite spodnjim navodilom.
    • Zdaj imate enakovredno tabelam v XML.
    • Izbrišite vrstice, ki ustrezajo polju vrste TimeStamp. Na ta način bo Doctrine ta polja prezrla.
    • Majhen previdnostni ukrep pri SQL Serverju je dodajanje oglatih oklepajev okoli vsake vrednosti, ki jo vsebuje "stolpec", ki ima enega ali več presledkov.
      Za to vrstico,

      Stolpec SQL Server je "Moje informacije". Doctrine ne ve, kako ravnati s presledki z MSSQL. Torej morate dodati kljuke, kot je ta:
  • Ko so vaše datoteke popravljene, zaženemo generiranje entitet.
    1
    php app/console doctrine:mapping:convert annotation ./src

Morda boste morali določiti upravitelja entitet, ki ga želite uporabiti, takole: –em=”…”.

  • Zdaj lahko izbrišete preslikavo, tj. datoteke .xml, ki so prisotne v virih.
    To je to, zdaj imate veljavne entitete, ki jih generira Doctrine. Ta rešitev nekoliko ... "brian fuck" je veljavna, dokler ekipa, odgovorna za razvoj Doctrine, ni integrirala izvedljive rešitve, ki bi omogočila izvorno podporo tipa TimeStamp v PHP.

Srečno in se vidimo kmalu!

★ ★ ★ ★ ★