laravel

Laravel Hoe een kolom aan een bestaande tabel toe te voegen

Laravel Hoe een kolom aan een bestaande tabel toe te voegen

Probleem

Het toevoegen van nieuwe kolommen aan uw Laravel-migraties is gebruikelijk. Applicaties zijn bedoeld om schaalbaar te zijn, wat betekent dat het toevoegen van nieuwe functies uw applicatie verder ontwikkelt.

Heel vaak moeten nieuwe Laravel-ontwikkelaars hun migraties uitvoeren, maar ze zorgen er niet voor dat migraties meerdere keren kunnen worden teruggedraaid en gemigreerd zonder iets te breken.

Hoewel dat niet onze focus is, denk ik dat het belangrijk was om dat te vermelden voordat we ons probleem beginnen.

Het volgende is een veelvoorkomend probleem dat nieuwe Laravel-ontwikkelaars proberen te doen wanneer ze een nieuwe kolom aan een bestaande tabel willen toevoegen.

Dus op dit punt hebben ze al zoiets gedaan als:

publieke functie omhoog()

Schema::create('organisaties', functie ($tabel)
$table->increments('id');
$table->string('name')->nullable();
$table->text('about')->nullable();
);

Dit zal een nieuwe tabel voor hen maken. En om dit schoon te maken, moet je ook de down-functie toevoegen en in dit geval gewoon je hele tafel laten vallen. De down-functie wordt uitgevoerd wanneer u uw migratie wilt terugdraaien.

Als we dat allemaal doornemen, komt het echte probleem naar voren wanneer ze een kolom vergeten en ze die daarna willen toevoegen, zodat ze een nieuw migratiebestand (klasse) maken en zoiets proberen uit te voeren als:

publieke functie omhoog()

Schema::create('organisaties', functie ($tabel)
$table->integer('size')->nullable();
);

Ze hopen een nieuwe kolomgrootte aan de bestaande tabel toe te voegen.

Laten we nu eens kijken wat er gebeurt en hoe we kunnen voorkomen dat dit nog een keer gebeurt.

Oplossing

Het grootste probleem hier is wat nieuwe ontwikkelaars vaak over het hoofd zien, namelijk de statische methodenaam van het Schema Sche . U gebruikt create alleen wanneer u in eerste instantie uw tabel maakt. Als u uw tabel op enig moment verder moet bijwerken, wilt u in plaats daarvan de tabel gebruiken.

Dus de echte up-functie zou als volgt moeten zijn:

publieke functie omhoog()

Schema::tabel('organisaties', functie ($tabel)
$table->integer('size')->nullable();
);

En de down-functie zou als volgt zijn:

publieke functie down()

Schema::table('organisaties', function($table)
$table->dropColumn('grootte');
);

Mijn persoonlijke suggestie aan u is dat u het volgende doet nadat u uw nieuwe (veranderende) migratiebestand hebt gemaakt:

Nog een tip

Dit zal in een later stadium van pas komen als u uw implementatie wilt automatiseren en uw script een rollback moet uitvoeren.

Een andere tip die ik je kan geven is om te plannen waar je je zuil wilt plaatsen. Door dit gewoon te doen, plaatst Laravel je nieuwe kolom aan het einde, waarschijnlijk na de kolom updated_at. (De meeste tafels hebben dit)

U wilt een methode gebruiken na, zodat uw uiteindelijke code er als volgt uitziet:

publieke functie omhoog()

Schema::table('organisaties', functie ($tabel)
$table->integer('size')->after('name')->nullable();
);

In dit geval zal Laravel je nieuwe kolom direct na de naamkolom plaatsen, zodat het er mooi uitziet en veel beter is georganiseerd.

Linkermuisknop werkt niet op Windows 10
Als u een speciale muis gebruikt met uw laptop of desktopcomputer, maar de linkermuisknop werkt niet not op Windows 10/8/7 om wat voor reden dan ook, ...
Cursor springt of beweegt willekeurig tijdens het typen in Windows 10
Als u merkt dat uw muiscursor vanzelf springt of beweegt, automatisch, willekeurig tijdens het typen op een Windows-laptop of -computer, dan kunnen en...
De scrollrichting van de muis en touchpads omkeren in Windows 10
Muis en Touchpads maken computergebruik niet alleen eenvoudig, maar ook efficiënter en minder tijdrovend. We kunnen ons een leven zonder deze apparate...