laravel

Laravel Hur man lägger till kolumn i en befintlig tabell

Laravel Hur man lägger till kolumn i en befintlig tabell

Problem

Att lägga till nya kolumner i dina Laravel-migreringar är en vanlig sak. Applikationer är avsedda att vara skalbara, vilket innebär att du lägger till nya funktioner utvecklar din applikation ytterligare.

Mycket ofta behöver nya Laravel-utvecklare köra sina migreringar men de ser inte till att migreringar kan återställas och migrera flera gånger utan att bryta någonting.

Även om det inte är vårt fokus, tycker jag att det var viktigt att säga det innan vi går in i vårt problem.

Följande är ett vanligt problem som nya Laravel-utvecklare kommer att försöka göra när de vill lägga till en ny kolumn i en befintlig tabell.

Så vid den här tiden gjorde de redan något som:

offentlig funktion upp ()

Schema :: skapa ('organisationer', funktion ($ tabell)
$ tabell-> steg ('id');
$ table-> string ('name') -> nullable ();
$ table-> text ('about') -> nullable ();
);

Detta skapar en ny tabell för dem. Och för att göra detta rent bör du också lägga till nerfunktionen och bara släppa hela bordet i det här fallet. Nerfunktionen körs när du vill återställa din migrering.

Hoppar igenom allt detta visas det verkliga problemet när de glömmer en kolumn och de vill lägga till det efteråt så att de skapar en ny migreringsfil (klass) försöker köra något som:

offentlig funktion upp ()

Schema :: skapa ('organisationer', funktion ($ tabell)
$ table-> heltal ('storlek') -> ogiltigt ();
);

De hoppas kunna lägga till en ny kolumnstorlek i den befintliga tabellen.

Låt oss nu se vad som händer och hur man kan förhindra att det händer igen.

Lösning

Det största problemet här är vad nya utvecklare ofta missar att märka vilket är det statiska metodnamnet för schemat . Du använder bara create när du först skapar din tabell. Om du behöver uppdatera din tabell när som helst vill du istället använda tabellen.

Så den verkliga upp-funktionen bör vara så här:

offentlig funktion upp ()

Schema :: tabell ('organisationer', funktion ($ tabell)
$ table-> heltal ('storlek') -> ogiltigt ();
);

Och nerfunktionen skulle vara så här:

offentlig funktion ner ()

Schema :: tabell ('organisationer', funktion ($ tabell)
$ table-> dropColumn ('storlek');
);

Mitt personliga förslag till dig är att när du har skapat din nya (ändrade) migreringsfil gör du följande:

Ett annat tips

Detta kommer att vara användbart i ett senare skede om du vill automatisera din distribution och ditt skript måste köra en återställning.

Ett annat tips som jag kan ge dig är att planera var du vill placera din kolumn. Bara genom att göra detta kommer Laravel att placera din nya kolumn i slutet, troligen efter kolumnen updated_at. (De flesta bord har detta)

Du vill använda en metod efter så att din slutliga kod ser ut så här:

offentlig funktion upp ()

Schema :: tabell ('organisationer', funktion ($ tabell)
$ table-> heltal ('storlek') -> efter ('namn') -> ogiltigt ();
);

I det här fallet kommer Laravel att placera din nya kolumn direkt efter namnkolumnen så att den ser bra ut och är organiserad mycket bättre.

Mus Omforma dina musknappar på olika sätt för olika program med X-Mouse Button Control
Omforma dina musknappar på olika sätt för olika program med X-Mouse Button Control
Kanske behöver du ett verktyg som kan göra att musens kontroll ändras med alla applikationer som du använder. Om så är fallet kan du prova en ansökan ...
Mus Microsoft Sculpt Touch Wireless Mouse Review
Microsoft Sculpt Touch Wireless Mouse Review
Jag har nyligen läst om Microsoft Sculpt Touch trådlös mus och bestämde mig för att köpa den. Efter att ha använt den ett tag bestämde jag mig för att...
Mus AppyMouse styrplatta och muspekare för Windows-surfplattor
AppyMouse styrplatta och muspekare för Windows-surfplattor
Surfplattanvändare saknar ofta muspekaren, särskilt när de brukar använda bärbara datorer. Pekskärmen Smartphones och surfplattor har många fördelar o...