Probleem
Uute veergude lisamine Laraveli migratsioonidele on tavaline asi. Rakendused on mõeldud laiendatavaks, mis tähendab, et uute funktsioonide lisamine arendab teie rakendust veelgi.
Väga sageli peavad uued Laraveli arendajad oma migreerimisi käivitama, kuid nad ei taga, et migratsioonid saaksid mitu korda tagasi liikuda ja midagi rikkuda.
Kuigi see pole meie tähelepanu keskpunkt, arvan, et enne probleemi lahendamist oli oluline seda öelda.
Järgnev on levinud probleem, mida uued Laraveli arendajad proovivad teha, kui nad soovivad olemasolevasse tabelisse uue veeru lisada.
Nii et nad tegid juba midagi sellist:
avalik funktsioon üles ()Skeem :: create ('organisatsioonid', function ($ tabel)
$ tabel-> juurdekasv ('id');
$ table-> string ('nimi') -> nullable ();
$ table-> text ('about') -> nullable ();
);
See loob neile uue tabeli. Ja selle puhastamiseks peaksite lisama ka allapoole funktsiooni ja sel juhul lihtsalt kogu oma laua maha viskama. Alla liikumise funktsioon käivitatakse, kui soovite oma migreerimist tagasi tuua.
Kõigest sellest üle hüpates ilmneb tõeline probleem, kui nad unustavad ühe veeru ja tahavad selle pärast lisada, et nad loovad uue rändefaili (klassi), proovides käivitada midagi sellist:
avalik funktsioon üles ()Skeem :: create ('organisatsioonid', function ($ tabel)
$ table-> integer ('size') -> nullable ();
);
Nad loodavad olemasolevasse tabelisse lisada uue veeru suuruse.
Vaatame nüüd, mis juhtub ja kuidas selle kordumist vältida.
Lahendus
Siin on peamine probleem see, mida uued arendajad kipuvad sageli märkamata jätma, mis on skeemi staatiline meetodi nimi . Looge saate kasutada ainult siis, kui loote oma tabelit algselt. Kui peate oma tabelit igal ajal täiendavalt värskendama, soovite selle asemel kasutada tabelit.
Nii et tegelik ülesfunktsioon peaks olema selline:
avalik funktsioon üles ()Skeem :: tabel ('organisatsioonid', funktsioon ($ tabel)
$ table-> integer ('size') -> nullable ();
);
Ja alla funktsioon oleks selline:
avalik funktsioon alla ()Skeem :: tabel ('organisatsioonid', funktsioon ($ tabel)
$ table-> dropColumn ('suurus');
);
Minu isiklik ettepanek teile on, et pärast uue (muutva) rändefaili loomist tehke järgmist:
- Käivitage migreerimine
- Kontrollige, kas veerg on tabelisse lisatud
- Tagastage ränne, käivitades php käsitöölised migrate: tagasipöördumine
- Veenduge, et midagi ei juhtuks
- Korrake samme 2 ja 3 uuesti, veendumaks, et saate kogu migratio ringi sulgeda
n
Veel üks näpunäide
See on hilisemas etapis mugav, kui soovite juurutamist automatiseerida ja skript peab tagastama.
Teine näpunäide, mille saan teile anda, on planeerida koht, kuhu soovite oma veeru paigutada. Lihtsalt seda tehes asetab Laravel teie uue veeru lõppu, tõenäoliselt pärast veergu uuendatud_at. (Enamikul tabelitel on see)
Soovite pärast meetodit kasutada, nii et teie lõplik kood näeks välja selline:
avalik funktsioon üles ()Skeem :: tabel ('organisatsioonid', funktsioon ($ tabel)
$ table-> integer ('size') -> after ('name') -> nullable ();
);
Sellisel juhul paigutab Laravel teie uue veeru kohe nimeveeru järele, nii et see näeb kena välja ja on palju paremini korraldatud.