Problem
Å legge til nye kolonner i Laravel-migrasjonene dine er en vanlig ting. Applikasjoner er ment å være skalerbare, noe som betyr at å legge til nye funksjoner utvikler applikasjonen din videre.
Svært ofte må nye Laravel-utviklere kjøre migrasjonene sine, men de sørger ikke for at migrasjoner kan tilbakestilles og migrere flere ganger uten å bryte noe.
Selv om det ikke er vårt fokus, tror jeg det var viktig å si det før vi går inn i problemet vårt.
Følgende er et vanlig problem som nye Laravel-utviklere vil prøve å gjøre når de vil legge til en ny kolonne i en eksisterende tabell.
Så på dette tidspunktet gjorde de allerede noe sånt som:
offentlig funksjon opp ()Schema :: create ('organisasjoner', funksjon ($ table)
$ tabell-> trinn ('id');
$ table-> string ('name') -> nullable ();
$ table-> text ('about') -> nullable ();
);
Dette vil skape en ny tabell for dem. Og for å gjøre dette rent, bør du også legge til nedfunksjonen og bare slippe hele bordet i dette tilfellet. Ned-funksjonen kjøres når du vil tilbakestille overføringen.
Å hoppe gjennom alt dette, viser det virkelige problemet når de glemmer en kolonne, og de vil legge til det etterpå, slik at de lager en ny migreringsfil (klasse), og prøv å kjøre noe som:
offentlig funksjon opp ()Schema :: create ('organisasjoner', funksjon ($ table)
$ table-> heltall ('size') -> nullable ();
);
De håper å legge til en ny kolonnestørrelse i den eksisterende tabellen.
La oss nå se hva som skjer og hvordan du kan forhindre at det skjer igjen.
Løsning
Hovedproblemet her er hva nye utviklere ofte har en tendens til å savne å legge merke til hvilket er det statiske metodenavnet på skjemaet . Du bruker bare create når du oppretter bordet. Hvis du trenger å oppdatere bordet ditt når som helst, vil du bruke tabellen i stedet.
Så den virkelige opp-funksjonen skal være slik:
offentlig funksjon opp ()Skjema :: tabell ('organisasjoner', funksjon ($ tabell)
$ table-> heltall ('size') -> nullable ();
);
Og ned-funksjonen vil være slik:
offentlig funksjon ned ()Skjema :: tabell ('organisasjoner', funksjon ($ tabell)
$ table-> dropColumn ('størrelse');
);
Mitt personlige forslag til deg er at når du har opprettet din nye (endrende) migreringsfil, gjør du følgende:
- Kjør migreringen
- Sjekk om kolonnen er lagt til tabellen
- Tilbakestill migrering ved å kjøre php artisan migrate: tilbakestilling
- Forsikre deg om at ingenting skjer
- Gjenta trinn 2 og 3 igjen for å sikre at du kan lukke hele sirkelen av migratio
n
Nok et tips
Dette vil være nyttig på et senere tidspunkt hvis du vil automatisere distribusjonen din og skriptet ditt må kjøre en tilbakeføring.
Et annet tips jeg kan gi deg er å planlegge hvor du vil plassere kolonnen din. Bare ved å gjøre dette, vil Laravel plassere den nye kolonnen din på slutten, sannsynligvis etter oppdatert_at-kolonnen. (De fleste bord har dette)
Du vil bruke en metode etterpå, slik at den endelige koden din ser slik ut:
offentlig funksjon opp ()Skjema :: tabell ('organisasjoner', funksjon ($ tabell)
$ table-> heltall ('size') -> after ('name') -> nullable ();
);
I dette tilfellet vil Laravel plassere den nye kolonnen din rett etter navnet kolonnen, slik at den ser fin ut og er organisert mye bedre.