Doktriini ajatempli viga: importige SQL Server 2008 tabelid
Veebiagentuur » Digitaalsed uudised » Doktriini ajatempli viga: importige SQL Server 2008 tabelid

Doktriini ajatempli viga: importige SQL Server 2008 tabelid

Kuidas importida väljaga SQL Serveri tabelit Ajatempel koos doktriiniga? Kui õpetustest siin ja seal ei piisa, on sageli ainult üks viis oma eesmärkide saavutamiseks... Käed mustaks! Täna pakun välja lahenduse, mille loodetavasti integreerib kiiresti Doctrine'i arendamise eest vastutav kogukond, mis võimaldab luua SQL Serveri andmebaasist Symfony2 üksusi, mis sisaldavad tüübivälja Ajatempel.

Mis on ajatempli tüüp?

Mulle näib olevat vajalik täpsustada väikest teavet ajatempli tüübi kohta. Ma ei ole MySQL-i ekspert, kuid kohatud teabe põhjal näeb MySQL-i ajatempel välja nagu kuupäev, mis muudab teisendamise lihtsamaks. Kuid sama tüüp SQL Serveri jaoks on oma arusaamises pisut peenem. Dokumentatsioon on saadaval Microsoft Technetis.

Andmetüüp, mis paljastab automaatselt genereeritud ühekohalised kahendarvud andmebaasis.
Huvitav… Ja kuidas ma ütlen Doctrine’ile, et ta mind ei pööraks? Pakun välja lahenduse, et probleem mujale viia...

Leidke "kohandatud" lahendus

Näen juba tulemas sõnumeid, mis ütlevad, et juba on olemas valmis meetod, mis töötab. JAH! Veelgi enam, seda Symfony2 ülesannet saab nimetada järgmiselt:

php rakenduse/konsooli doktriin:mapping:import
See ülesanne töötab hästi, kuid nagu ma siit lugesin, töötab Doctrine umbes 70–80% andmebaasi võimalikest vastendustest. Minu puhul tahtsin eksportida SQL Serveri (2008) tabeli vastenduse, mis sisaldas kuulsat ajatempli välja. Ja ülejäänud 20% kaardistustest on just seda tüüpi väljad.

Käivitan käsu ja proovin mappaqe importida.

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

Minu puhul pidin kasutama kahte lisavõimalust, nimelt:

  1. –em=”…” täpsustadaÜksuse juht vastutan minu SQL Serveri andmebaasi eest;
  2. --filter="tabel". Tahtsin kasutada seda valikut, mis töötas koos MariaDB-ga, kuid tundus, et seda ignoreeriti MSSQL-iga kasutamisel. See võimaldab teil määrata eksporditava tabeli. Minu puhul olin kopeerinud oma BDD, kustutanud tabelid, mis mind ei huvitanud ja loonud uue profiiliÜksuse juht.
    Ja siin on tõstatatud erand:
1
2
[DoctrineDBALDBALException]
Tundmatu andmebaas tüüp taotletud ajatemplit, DoctrineDBALPlatformsSQLServer2008Platform ei pruugi seda toetada.

Nüüdsest peame täringuid sikutama.
Ajatempli tüüpi ei toetata – ja tunnistan, et ma ei tea tegelikult, mis tüüpi PHP väljadega seda seostada – me ütleme ajutiselt Doctrine’ile, et see tüüp tuleb teisendada kuupäev Kellaaeg.

  • Minge puustruktuuriga näidatud kausta, vendordoctrinedbalibDoctrineDBALPlatforms.
  • Selles kaustas on klassid, mis toetavad enamikku olemasolevatest DBMS-idest.
  • Minu puhul töötasin SQL Server 2008 R2 kallal, nii et muutsin faili SQLServer2008Platform.php, kuid muutke julgelt teist faili, kui see sobib teie konfiguratsiooniga.
  • Me muudame meetodit Initsialiseeri DoctrineTypeMappings. Muutuvas doktriinTypeMapping pakub teavet tüüpide teisendamiseks. Lisa rida:
    $this->doctrineTypeMapping['timestamp'] = 'kuupäev, kellaaeg';
  • Taaskäivitage kaardistamise import. Kõigi väljade kaardistus on imporditud.
  • Peate meeles pidama failile lisatud rea eemaldamist. Kui te pole kindel, eemaldage kõik müüjad ja installige need uuesti.
  • Nüüd minge järjestikku loodud failide juurde. Iga tee on näidatud ja järgige omakorda allolevaid juhiseid.
    • Nüüd on teil XML-i tabelite ekvivalent.
    • Kustutage read, mis vastavad ajatempli tüübi väljale. Nii ignoreerib Doctrine neid välju.
    • Väike ettevaatusabinõu SQL Serveri puhul on sulgude lisamine iga väärtuse ümber, mida sisaldab üks või mitu tühikut sisaldavat "veeru".
      Selle rea jaoks

      SQL Serveri veerg on "Minu teave". Doctrine ei tea, kuidas MSSQL-iga tühikuid käsitleda. Seega peate lisama sellised konksud:
  • Kui teie failid on parandatud, käivitame olemi genereerimise.
    1
    php app/console doctrine:mapping:convert annotation ./src

Võimalik, et peate määrama kasutatava olemihalduri, näiteks järgmiselt: –em=”…”.

  • Nüüd saate kustutada vastenduse, st ressurssides olevad xml-failid.
    See on kõik, teil on nüüd Doctrine'i loodud kehtivad olemid. See lahendus, natuke … "brian fuck", kehtib seni, kuni Doctrine'i arendamise eest vastutav meeskond ei ole integreerinud elujõulist lahendust, mis võimaldaks TimeStamp tüüpi PHP-s natiivselt toetada.

Edu ja peatse kohtumiseni!

★ ★ ★ ★ ★