Ongelma
Uusien sarakkeiden lisääminen Laravel-siirtoihin on yleinen asia. Sovellusten on tarkoitus olla skaalautuvia, mikä tarkoittaa, että uusien ominaisuuksien lisääminen kehittää sovellustasi edelleen.
Hyvin usein uusien Laravel-kehittäjien on suoritettava siirrot, mutta he eivät varmista, että siirrot voivat palata ja siirtyä useita kertoja rikkomatta mitään.
Vaikka se ei ole meidän painopiste, mielestäni oli tärkeää sanoa, että ennen kuin siirrymme ongelmaan.
Seuraava on yleinen asia, jonka uudet Laravel-kehittäjät yrittävät tehdä, kun he haluavat lisätä uuden sarakkeen olemassa olevaan taulukkoon.
Joten tässä vaiheessa he tekivät jo jotain:
julkinen toiminto ylös ()Schema :: create ('organisaatiot', function ($ taulukko)
$ taulukko-> lisäykset ('id');
$ table-> merkkijono ('nimi') -> nullable ();
$ table-> text ('about') -> nullable ();
);
Tämä luo heille uuden taulukon. Ja jotta tämä olisi puhdas, sinun on myös lisättävä alas-toiminto ja pudottava koko pöytäsi tässä tapauksessa. Alas-toiminto suoritetaan, kun haluat palauttaa siirron.
Siitä huolimatta, todellinen ongelma ilmenee, kun he unohtavat yhden sarakkeen ja haluavat lisätä sen jälkeenpäin, jotta he luovat uuden siirtotiedoston (luokan) yrittää suorittaa jotain:
julkinen toiminto ylös ()Schema :: create ('organisaatiot', function ($ taulukko)
$ taulukko-> kokonaisluku ('koko') -> mitätöitävä ();
);
He haluavat lisätä uuden sarakekoon olemassa olevaan taulukkoon.
Katsotaan nyt, mitä tapahtuu ja miten estää sitä toistumasta.
Ratkaisu
Suurin ongelma tässä on se, mitä uudet kehittäjät usein kaipaavat huomaamatta, mikä on skeeman staattinen menetelmä . Luomista käytetään vain, kun luot alun perin taulukon. Jos haluat päivittää taulukkoasi edelleen milloin tahansa, haluat käyttää sen sijaan taulukkoa.
Joten todellisen ylös-toiminnon pitäisi olla seuraava:
julkinen toiminto ylös ()Schema :: taulukko ('organisaatiot', funktio ($ taulukko)
$ taulukko-> kokonaisluku ('koko') -> mitätöitävä ();
);
Ja alas-toiminto olisi seuraava:
julkinen tehtävä alas ()Schema :: taulukko ('organisaatiot', funktio ($ taulukko)
$ table-> dropColumn ('koko');
);
Henkilökohtainen ehdotukseni sinulle on, että kun olet luonut uuden (muuttavan) siirtotiedoston, toimi seuraavasti:
- Suorita siirto
- Tarkista, onko sarake lisätty taulukkoon
- Palauta siirto suorittamalla php-käsityöläiset migrate: rollback
- Varmista, ettei mitään tapahdu
- Toista vaiheet 2 ja 3 uudelleen varmistaaksesi, että voit sulkea koko migration ympyrän
n
Toinen vinkki
Tämä on kätevää myöhemmin, jos haluat automatisoida käyttöönoton ja komentosarjosi on suoritettava palautus.
Toinen vinkki, jonka voin antaa sinulle, on suunnitella mihin haluat sijoittaa sarakkeen. Vain tekemällä tämän Laravel sijoittaa uuden sarakkeen loppuun, luultavasti päivitetyn_at -sarakkeen jälkeen. (Useimmissa taulukoissa on tämä)
Haluat käyttää menetelmää sen jälkeen, jotta lopullinen koodisi näyttäisi tältä:
julkinen toiminto ylös ()Schema :: taulukko ('organisaatiot', funktio ($ taulukko)
$ taulukko-> kokonaisluku ('koko') -> jälkeen ('nimi') -> mitätöitävä ();
);
Tässä tapauksessa Laravel sijoittaa uuden sarakkeen heti nimisarakkeen jälkeen, joten se näyttää hyvältä ja on järjestetty paljon paremmin.