引言
使用laravel的資料庫遷移功能進行表的建立,和遷移回滾之後,我們繼續說說在設計中
表結構的更改之後的處理。以及如何為資料庫填充一些偽資料作為測試。
資料約束
上一章說到資料庫遷移回滾,可以手動控制回滾到哪一批次的遷移位置。比如我們建立的 events
表,
如果在遷移檔案內新增欄位,程式碼如下:
我們在資料庫表中間的位置新增了一個 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 方法,指定遷移開始和回滾所要執行的動作,
我們僅僅是新增一個欄位,或者在回滾的時候,刪除一個欄位,程式碼如下圖:
完成後在命令列執行遷移指令:
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
輸出內容類似下圖:
還有兩個高危指令,一個是 magrate:reset 回滾所有的遷移,不同於 migrate:rollback 僅回滾某一批次的遷移;
還有一個是 migrate:refresh,如果你修改了某些遷移過的檔案,這個指令會重新整理所有修改的變更並應用。
這兩個都要慎用!
寫在最後
本文是對上一章所述laravel資料庫遷移功能的補充。資料庫遷移是一個比較大的動作,
特別是已經上線生產的應用資料庫,如果非到更新遷移的地步不可,需要預期做好演練,
以應對可能的突發事故。
Happy coding :-)
我是@程式設計師小助手,專注程式設計知識,圈子動態的IT領域原創作者
本作品採用《CC 協議》,轉載必須註明作者和本文連結