Doktrinos laiko žymos klaida: importuokite SQL Server 2008 lenteles
Interneto agentūra » Skaitmeninės naujienos » Doktrinos laiko žymos klaida: importuokite SQL Server 2008 lenteles

Doktrinos laiko žymos klaida: importuokite SQL Server 2008 lenteles

Kaip importuoti SQL serverio lentelę su lauku Timestamp su doktrina? Kai pamokų čia ir ten nepakanka, dažnai yra tik vienas būdas pasiekti savo tikslus... Sutepkite rankas! Šiandien aš siūlau sprendimą, kurį, tikiuosi, greitai integruos bendruomenė, atsakinga už doktrinos kūrimą, leidžiančią sukurti Symfony2 objektus iš SQL serverio duomenų bazės, kurioje yra tipo laukas. Timestamp.

Kas yra laiko žymos tipas?

Man atrodo, kad reikia nurodyti šiek tiek informacijos apie laiko žymos tipą. Nesu MySQL ekspertas, bet iš mano sutiktos informacijos MySQL laiko žyma atrodo kaip data, todėl ją lengviau konvertuoti. Tačiau tas pats SQL serverio tipas yra šiek tiek subtilesnis. Dokumentaciją galima rasti „Microsoft Technet“.

Duomenų tipas, atskleidžiantis automatiškai sugeneruotus vieno simbolio dvejetainius skaičius duomenų bazėje.
Įdomu... Ir kaip pasakyti Doktrinai, kad manęs neatverstų? Siūlau sprendimą, kaip išspręsti problemą...

Raskite „priskirtą“ sprendimą

Jau matau ateinančius pranešimus, kuriuose sakoma, kad jau yra paruoštas metodas, kuris veikia. TAIP! Be to, šią „Symfony2“ užduotį galima pavadinti tokiu būdu:

php app/console doktrina:mapping:import
Ši užduotis veikia puikiai, bet, kaip čia perskaičiau, „Doctrine“ veikia maždaug 70–80 % galimų duomenų bazės atvaizdų. Mano atveju norėjau eksportuoti SQL Server (2008) lentelės, kurioje buvo garsusis laiko žymos laukas, susiejimą. O likusiuose 20% atvaizdų yra būtent tokio tipo laukai.

Aš paleisiu komandą ir bandysiu importuoti mappaqe.

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

Mano atveju turėjau naudoti dvi papildomas parinktis, būtent:

  1. –em=”…” nurodytiSubjekto vadovas atsakingas už mano SQL serverio duomenų bazę;
  2. --filter = "lentelė". Norėjau naudoti šią parinktį, kuri veikė su MariaDB, bet atrodė, kad ji buvo ignoruojama naudojant MSSQL. Tai leidžia nurodyti lentelę, kurią norite eksportuoti. Mano atveju aš nukopijavau savo BDD, ištryniau lenteles, kurios manęs nedomino ir sukūriau naują profilįSubjekto vadovas.
    Ir čia iškelta išimtis:
1
2
[Doktrina DBALDBALException]
Nežinoma duomenų bazė tipas prašoma laiko žymos, „DoctrineDBALPlatformsSQLServer2008Platform“ gali jos nepalaikyti.

Nuo šiol turėsime kalti kauliukus.
Laiko žymos tipas nepalaikomas – ir aš tikrai nežinau, su kokio tipo PHP laukais jį susieti – laikinai pasakysime doktrinai, kad šį tipą reikia konvertuoti datos laikas.

  • Eikite į aplanką, nurodytą medžio struktūros, vendordoctrinedbalibDoctrineDBALPlatforms.
  • Šiame aplanke yra klasės, palaikančios daugumą esamų DBVS.
  • Mano atveju dirbau su SQL Server 2008 R2, todėl redaguoju failą SQLServer2008Platform.php, bet nedvejodami redaguokite kitą failą, jei jis atitinka jūsų konfigūraciją.
  • Mes redaguosime metodą inicijuotiDoctrineTypeMappings. Kintamuoju doctrineTypeMapping yra informacija, skirta konvertuoti tipus. Pridėkite eilutę:
    $this->doctrineTypeMapping['timestamp'] = 'data, laikas';
  • Iš naujo paleiskite žemėlapių importavimą. Importuotas visų laukų žemėlapis.
  • Turite nepamiršti pašalinti eilutės, kurią pridėjote prie failo. Jei nesate tikri, pašalinkite visus pardavėjus ir įdiekite juos iš naujo.
  • Dabar eikite į sugeneruotus failus. Nurodytas kiekvieno kelias, o savo ruožtu vadovaukitės toliau pateiktomis nuorodomis.
    • Dabar turite savo lentelių atitikmenį XML formatu.
    • Ištrinkite eilutes, atitinkančias laiko žymos tipo lauką. Tokiu būdu Doktrina nepaisys šių laukų.
    • Nedidelė atsargumo priemonė naudojant SQL Server yra pridėti skliaustus aplink kiekvieną reikšmę, kurią sudaro "stulpelis", kuriame yra vienas ar daugiau tarpų.
      Šiai linijai

      SQL serverio stulpelis yra „Mano informacija“. Doktrina nežino, kaip tvarkyti tarpus su MSSQL. Taigi jums reikia pridėti tokius kabliukus:
  • Kai failai bus pataisyti, pradedame objektų generavimą.
    1
    php app/console doctrine:mapping:convert anotation ./src

Gali reikėti nurodyti naudojamą objekto valdytoją, pavyzdžiui: –em=”…”.

  • Dabar galite ištrinti susiejimą, t. y. .xml failus, esančius šaltiniuose.
    Štai viskas, dabar jūs turite galiojančius subjektus, sugeneruotus Doktrinos. Šis sprendimas, šiek tiek… „brian fuck“, galioja tol, kol komanda, atsakinga už „Doctrine“ kūrimą, nėra integravusi perspektyvaus sprendimo, kuris leistų PHP palaikyti „TimeStamp“ tipą.

Sėkmės ir iki greito pasimatymo!

★ ★ ★ ★ ★