Doktrīnas laika zīmoga kļūda: importējiet SQL Server 2008 tabulas
Tīmekļa aģentūra » Digitālās ziņas » Doktrīnas laika zīmoga kļūda: importējiet SQL Server 2008 tabulas

Doktrīnas laika zīmoga kļūda: importējiet SQL Server 2008 tabulas

Kā importēt SQL Server tabulu ar lauku Timestamp ar doktrīnu? Kad ar pamācībām šeit un tur nepietiek, bieži vien ir tikai viens veids, kā sasniegt savus mērķus... Sasmērē rokas! Šodien es piedāvāju risinājumu, kuru, cerams, ātri integrēs kopiena, kas atbild par Doctrine izstrādi, kas ļauj izveidot Symfony2 entītijas no SQL Server datu bāzes, kas satur tipa lauku. Timestamp.

Kas ir laikspiedola veids?

Man šķiet nepieciešams norādīt nelielu informāciju par laika zīmoga veidu. Es neesmu MySQL eksperts, taču, pamatojoties uz iegūto informāciju, MySQL laikspiedols izskatās pēc datuma, kas atvieglo konvertēšanu. Tomēr tāda paša veida SQL Server izpratne ir nedaudz smalkāka. Dokumentācija ir pieejama vietnē Microsoft Technet.

Datu tips, kas atklāj automātiski ģenerētus vienas rakstzīmes bināros skaitļus datu bāzē.
Interesanti... Un kā es varu pateikt Doctrine, lai tā mani nepievērš? Es piedāvāju risinājumu, lai novērstu problēmu...

Atrodiet “pielāgotu” risinājumu

Es jau redzu ziņojumus, kas man saka, ka jau ir gatava metode, kas darbojas. JĀ ! Turklāt tieši šo Symfony2 uzdevumu var izsaukt šādi:

php app/console doktrīna:mapping:import
Šis uzdevums darbojas labi, taču, kā es šeit lasīju, Doctrine darbojas aptuveni 70–80% iespējamo kartējumu datubāzē. Manā gadījumā es gribēju eksportēt SQL Server (2008) tabulas kartējumu, kurā bija slavens TimeStamp lauks. Un atlikušajos 20% kartējumu ir tieši šāda veida lauki.

Es izpildīšu komandu un mēģināšu importēt mappaqe.

1
php app/console doktrīna:mapping:import —force NamespaceNameBundle xml

Manā gadījumā man bija jāizmanto divas papildu iespējas, proti:

  1. –em=”…” lai norādītuEntītijas vadītājs atbildīgs par manu SQL Server datubāzi;
  2. --filtrs = "tabula". Es gribēju izmantot šo opciju, kas darbojās ar MariaDB, taču šķita, ka, lietojot kopā ar MSSQL, tā tika ignorēta. Tas ļauj norādīt tabulu, ko eksportēt. Manā gadījumā es biju nokopējis savu BDD, biju izdzēsis tabulas, kas mani neinteresēja un izveidojis jaunu profiluEntītijas vadītājs.
    Un šeit ir izvirzīts izņēmums:
1
2
[Doktrīna DBALDBALIzņēmums]
Nezināma datu bāze tips pieprasīts laikspiedols, iespējams, DoctrineDBALPlatformsSQLServer2008Platform to neatbalsta.

No šī brīža mums būs jāmet kauliņi.
Laika zīmoga veids netiek atbalstīts — un es atzīstu, ka īsti nezinu, ar kādiem PHP laukiem to saistīt — mēs īslaicīgi pateiksim Doctrine, ka šis tips ir jākonvertē. datums Laiks.

  • Dodieties uz mapi, ko norāda koka struktūra, vendordoctrinedbalibDoctrineDBALPlatforms.
  • Šajā mapē ir klases, kas atbalsta lielāko daļu esošo DBVS.
  • Manā gadījumā es strādāju pie SQL Server 2008 R2, tāpēc es rediģēju failu SQLServer2008Platform.php, taču varat rediģēt citu failu, ja tas atbilst jūsu konfigurācijai.
  • Mēs rediģēsim metodi inicializētDoctrineTypeMappings. Mainīgā doctrineTypeMapping ir sniegta informācija, lai pārveidotu tipus. Pievienojiet rindu:
    $this->doctrineTypeMapping['timestamp'] = 'datetime';
  • Atsākt kartēšanas importēšanu. Visu lauku kartēšana ir importēta.
  • Jums jāatceras noņemt failam pievienoto rindiņu. Ja neesat pārliecināts, noņemiet visus piegādātājus un atkārtoti instalējiet tos.
  • Tagad pēc kārtas pārejiet uz ģenerētajiem failiem. Katram ir norādīts ceļš, un, savukārt, sekojiet tālāk norādītajām norādēm.
    • Tagad jums ir jūsu tabulu ekvivalents XML formātā.
    • Izdzēsiet rindas, kas atbilst laika zīmoga tipa laukam. Tādā veidā Doktrīna šos laukus ignorēs.
    • Neliels piesardzības pasākums, izmantojot SQL Server, ir pievienot kvadrātiekavas ap katru vērtību, ko satur "kolonna", kurā ir viena vai vairākas atstarpes.
      Šai līnijai

      SQL servera kolonna ir "Mana informācija". Doctrine nezina, kā rīkoties ar atstarpēm ar MSSQL. Tātad jums jāpievieno šādi āķi:
  • Kad jūsu faili ir izlaboti, mēs uzsākam entītiju ģenerēšanu.
    1
    php app/console doctrine:mapping:convert anotation ./src

Iespējams, būs jānorāda izmantojamais entītijas pārvaldnieks, piemēram: –em=”…”.

  • Tagad varat dzēst kartējumu, t.i., resursos esošos .xml failus.
    Tas ir viss, jums tagad ir derīgas entītijas, ko ģenerē Doktrīna. Šis risinājums mazliet… “Brian fuck” ir derīgs tik ilgi, kamēr komanda, kas ir atbildīga par Doctrine izstrādi, nav integrējusi dzīvotspējīgu risinājumu, kas ļautu PHP iekšienē atbalstīt TimeStamp tipu.

Veiksmi un uz drīzu tikšanos!

★ ★ ★ ★ ★