3分鐘短文:書接上回,Laravel資料庫遷移的那些個小技巧

ragus發表於2020-09-29

引言

使用laravel的資料庫遷移功能進行表的建立,和遷移回滾之後,我們繼續說說在設計中

表結構的更改之後的處理。以及如何為資料庫填充一些偽資料作為測試。

圖片

資料約束

上一章說到資料庫遷移回滾,可以手動控制回滾到哪一批次的遷移位置。比如我們建立的 events 表,

如果在遷移檔案內新增欄位,程式碼如下:

pic

我們在資料庫表中間的位置新增了一個 venue 欄位。然後使用遷移指令

php artisan migrate

就可以應用這些改變了。

很多時候,並不是說我們建立了表,並且指定了欄位名,和欄位資料型別就算完事兒了。

我們需要空與非空約束,預設值約束,主鍵約束,外來鍵約束等等資料庫所具有的特性,

這才是關係型資料庫的魅力。

比如宣告一個布林型別的值,並宣告預設為false:

$table->boolean('confirmed')->default(false);

比如設定一個字串型別的欄位,允許為null:

$table->string('comments')->nullable();

比如設定整型為無符號數:

$table->tinyInteger('age')->unsigned();

在給上面的 age 欄位設定預設值:

$table->tinyInteger('age')->unsigned()->default(0);

增刪欄位

使用遷移功能增刪資料庫表的欄位,與之前講的建立遷移檔案相同,

首先建立一個遷移檔案,使用以下腳手架指令:

php artisan make:migration add_enabled_to_events_table --table=events

本遷移檔案我們要為表 events 新增一個 enabled 的布林型別的欄位。上述指令輸出內容如下:

Created Migration: 2020_09_28_213116_add_enabled_to_events_table

現在為該遷移檔案新增 up & down 方法,指定遷移開始和回滾所要執行的動作,

我們僅僅是新增一個欄位,或者在回滾的時候,刪除一個欄位,程式碼如下圖:

pic

完成後在命令列執行遷移指令:

php artisan migrate

輸出結果如下:

Migrating: 2020_09_28_213116_add_enabled_to_events_table
Migrated: 2020_09_28_213116_add_enabled_to_events_table

上面我們並沒有指定新增的欄位在哪個欄位的後面,所以laravel所組裝的SQL就預設是最後一個欄位之後。

大家應該不陌生SQL語句追加欄位的語法:

ALTER TABLE contacts ADD last_name varchar(40) NOT NULL AFTER contact_id;

laravel的遷移指令也允許我們指定某個追加的欄位位於某個列之後:

$table->boolean('enabled')->after('name');

遷移狀態

檢視當前資料庫的遷移狀態,會讓我們檢視建立的遷移檔案中哪些被應用了,

哪些還沒有被應用,這樣在資料庫表比較多的情況下,可以有效地排查問題。

laravel提供了腳手架命令:

php artisan migrate:status

輸出內容類似下圖:

pic

還有兩個高危指令,一個是 magrate:reset 回滾所有的遷移,不同於 migrate:rollback 僅回滾某一批次的遷移;

還有一個是 migrate:refresh,如果你修改了某些遷移過的檔案,這個指令會重新整理所有修改的變更並應用。

這兩個都要慎用!

寫在最後

本文是對上一章所述laravel資料庫遷移功能的補充。資料庫遷移是一個比較大的動作,

特別是已經上線生產的應用資料庫,如果非到更新遷移的地步不可,需要預期做好演練,

以應對可能的突發事故。

Happy coding :-)

我是@程式設計師小助手,專注程式設計知識,圈子動態的IT領域原創作者

本作品採用《CC 協議》,轉載必須註明作者和本文連結
write-less-do-more-make-you-out-of-door

相關文章