Doctrine Timestamp Error: Tuo SQL Server 2008 -taulukot
Kuinka tuoda SQL Server -taulukko kentällä Aikaleima Opin kanssa? Kun opetusohjelmat siellä täällä eivät riitä, on usein vain yksi tapa saavuttaa tavoitteesi... Likaa kätesi! Tänään ehdotan ratkaisua, jonka toivottavasti Doctrinen kehittämisestä vastaava yhteisö integroi nopeasti. Sen avulla voidaan luoda Symfony2-kokonaisuuksia SQL Server -tietokannasta, jotka sisältävät tyyppikentän. Aikaleima.
Mikä on aikaleimatyyppi?
Minusta näyttää tarpeelliselta määrittää joitain pieniä tietoja Aikaleimatyypistä. En ole MySQL-asiantuntija, mutta löytämieni tietojen perusteella MySQL-aikaleima näyttää päivämäärältä, mikä helpottaa muuntamista. Sama tyyppi SQL Serverille on kuitenkin hieman hienovaraisempi ymmärryksessään. Dokumentaatio on saatavilla Microsoft Technetissä.
Tietotyyppi, joka paljastaa automaattisesti luodut yksimerkkiset binaariluvut tietokannassa.
Mielenkiintoista… Ja kuinka voin kertoa Doctrinelle, ettei se käännytä minua? Ehdotan ratkaisua ongelman poistamiseksi...
Etsi "mukautettu" ratkaisu
Näen jo tulevat viestit, joissa kerrotaan, että on jo olemassa valmis menetelmä, joka toimii. OUI! Lisäksi tämä Symfony2-tehtävä voidaan kutsua tällä tavalla:
php-sovellus/konsoli doctrine:mapping:import
Tämä tehtävä toimii hyvin, mutta kuten luin täältä, Doctrine toimii noin 70-80% mahdollisista kartoituksista tietokannassa. Minun tapauksessani halusin viedä SQL Server (2008) -taulukon kartoituksen, joka sisälsi kuuluisan Aikaleima-kentän. Ja lopuissa 20 prosentissa kartoituksista on juuri tämäntyyppisiä kenttiä.
Suoritan komennon ja yritän tuoda mappaqen.
|
|
Minun tapauksessani minun piti käyttää kahta lisävaihtoehtoa, nimittäin:
- –em=”…” määrittääksesiEntity Manager Vastaan SQL Server -tietokannastani;
- --filter=”taulukko”. Halusin käyttää tätä vaihtoehtoa, joka toimi MariaDB:n kanssa, mutta vaikutti siltä, että se jätettiin huomiotta käytettäessä MSSQL:n kanssa. Tämän avulla voit määrittää vietävän taulukon. Minun tapauksessani olin kopioinut BDD:ni, olin poistanut taulukot, jotka eivät kiinnostaneet minua ja luonut uuden profiilinEntity Manager.
Ja tässä on esitetty poikkeus:
|
|
Tästä eteenpäin meidän on nostettava noppaa.
Aikaleimatyyppiä ei tueta - ja myönnän, että en todellakaan tiedä minkä tyyppisiin PHP-kenttiin se liitetään - kerromme väliaikaisesti Doctrinelle, että tämä tyyppi on muutettava treffiaika.
- Siirry puurakenteen osoittamaan kansioon, vendordoctrinedbalibDoctrineDBALPlatforms.
- Tässä kansiossa on luokat, jotka tukevat suurinta osaa olemassa olevista DBMS-järjestelmistä.
- Minun tapauksessani työskentelin SQL Server 2008 R2:n parissa, joten muokkaan tiedostoa SQLServer2008Platform.php, mutta voit muokata toista tiedostoa, jos se vastaa määrityksiäsi.
- Muokkaamme menetelmää alusta DoctrineTypeMappings. Vaihtelevassa muodossa doctrineTypeMapping esittää tiedot tyyppien muuntamiseksi. Lisää rivi:
$this->doctrineTypeMapping['timestamp'] = 'datetime'; - Aloita kartoituksen tuonti uudelleen. Kaikkien kenttien kartoitus on tuotu.
- Muista poistaa tiedostoon lisäämäsi rivi. Jos olet epävarma, poista kaikki toimittajat ja asenna ne uudelleen.
- Siirry nyt peräkkäin luotuihin tiedostoihin. Jokaisen polku on merkitty, ja noudata vuorostaan alla olevia ohjeita.
- Sinulla on nyt taulukoitasi vastaavat XML-muodot.
- Poista rivit, jotka vastaavat aikaleimatyyppikenttää. Tällä tavalla Doctrine jättää nämä kentät huomioimatta.
- Pieni varotoimenpide SQL Serverissä on lisätä hakasulkeet jokaisen "sarakkeen" sisältämän arvon ympärille, jossa on yksi tai useampi välilyönti.
tälle riville,
SQL Server -sarake on "Omat tiedot". Doctrine ei osaa käsitellä välilyöntejä MSSQL:llä. Joten sinun on lisättävä koukut seuraavasti:
- Kun tiedostosi on korjattu, käynnistämme entiteettien luomisen.
1php app/console doctrine:mapping:convert annotation ./src
Saatat joutua määrittämään käytettävän entiteettien hallinnan, kuten näin: –em=”…”.
- Voit nyt poistaa kartoituksen, eli resursseissa olevat .xml-tiedostot.
Siinä kaikki, sinulla on nyt Doctrinen luomia kelvollisia entiteettejä. Tämä ratkaisu hieman… "brian fuck" on voimassa niin kauan kuin Doctrinen kehittämisestä vastaava tiimi ei ole integroinut toimivaa ratkaisua, joka sallisi TimeStamp-tyypin tuen natiivisti PHP:ssä.
Onnea ja nähdään pian!