Laravel hvordan legge til kolonne til en eksisterende tabell

Laravel hvordan legge til kolonne til en eksisterende tabell

Problem

Å legge til nye kolonner til Laravel -migrasjonene dine er en vanlig ting. Programmer er ment å være skalerbare, noe som betyr at å legge til nye funksjoner utvikler applikasjonen din videre.

Svært ofte trenger nye Laravel -utviklere å kjøre migrasjoner, men de sørger ikke for at migrasjoner kan rulle tilbake og migrere flere ganger uten å bryte noe.

Selv om det ikke er vårt fokus, tror jeg det var viktig å oppgi at før vi drar inn i problemet vårt.

Følgende er et vanlig spørsmål som nye Laravel -utviklere vil prøve å gjøre når de vil legge til en ny kolonne til en eksisterende tabell.

Så på dette tidspunktet gjorde de allerede noe sånt som:

offentlig funksjon opp ()

Skjema :: create ('organisations', funksjon ($ tabell)
$ tabell-> trinn ('id');
$ tabell-> streng ('navn')-> nullable ();
$ tabell-> tekst ('om')-> nullable ();
);

Dette vil lage et nytt bord for dem. Og for å gjøre dette rent, bør du også legge til ned -funksjonen og bare slippe hele bordet i dette tilfellet. Down -funksjonen vil bli kjørt når du vil rulle tilbake migrasjonen.

Når de hopper gjennom alt dette, vises det virkelige problemet når de glemmer en kolonne, og de vil legge til det etterpå slik at de oppretter en ny migrasjonsfil (klasse) prøver å kjøre noe som:

offentlig funksjon opp ()

Skjema :: create ('organisations', funksjon ($ tabell)
$ tabell-> heltall ('størrelse')-> nullable ();
);

De håper å legge til en ny kolonnestørrelse til 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, noe som er det statiske metodenavnet på skjemaet . Du bruker bare Opprett når du opprinnelig lager bordet ditt. Hvis du trenger å oppdatere tabellen ytterligere, vil du bruke tabellen i stedet.

Så den virkelige opp -funksjonen skal være slik:

offentlig funksjon opp ()

Skjema :: tabell ('organisasjoner', funksjon ($ tabell)
$ tabell-> heltall ('størrelse')-> nullable ();
);

Og ned -funksjonen ville være slik:

offentlig funksjon ned ()

Skjema :: tabell ('organisasjoner', funksjon ($ tabell)
$ tabell-> dropColumn ('størrelse');
);

Mitt personlige forslag til deg er at etter at du har opprettet din nye (endrede) migrasjonsfil, gjør du følgende:

  • Kjør migrasjonen
  • Sjekk om kolonnen er lagt til i tabellen
  • Rollback Migrasjonen ved å kjøre PHP Artisan Migrate: Rollback
  • Forsikre deg om at ingenting skjer
  • Gjenta trinn 2 og 3 igjen for å sikre at du kan lukke hele sirkelen av migratio
  • n

Et annet tips

Dette vil komme nyttig på et senere tidspunkt hvis du vil automatisere distribusjonen din og skriptet ditt må kjøre en tilbakevending.

Et annet tips som 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 den oppdaterte_at -kolonnen. (De fleste bord har dette)

Du vil bruke en metode etter slik at den endelige koden din vil se slik ut:

offentlig funksjon opp ()

Skjema :: tabell ('organisasjoner', funksjon ($ tabell)
$ tabell-> heltall ('størrelse')-> etter ('navn')-> nullable ();
);

I dette tilfellet vil Laravel plassere den nye kolonnen din rett etter navnekolonnen, så den ser fin ut og er organisert mye bedre.