Laravel學習筆記(五)數據庫 數據庫遷移案例2——創建數據結構,數據表,修改數據結構

默認假設

所有的列在定義的時候都有默認的假設,你可以根據需要重寫。

  • Laravel假定每個表都有一個數值型的主鍵(通常命名爲”id”),確保新加入的每一行都是唯一的。Laravel只有在每個表都有數值型主鍵時纔會正常運行。所以,對於每一個Laravel應用,都要確保定義的主鍵使用的是increments()方法。
  • 列在默認情況下爲NOT NULL。

現在,讓我們一行行分析結構生成器生成的authors表,下面是up()方法中的代碼:

複製代碼
 1 // auto increment id (primary key)
 2 $table->increments('id');
 3 
 4 $table->string('name');
 5 $table->integer('age')->nullable();
 6 $table->boolean('active')->default(1);
 7 $table->integer('role_id')->unsigned();
 8 $table->text('bio');
 9 
10 // created_at, updated_at DATETIME
11 $table->timestamps();
複製代碼

實際上生成的SQL代碼爲:

複製代碼
1 `id` INT(11) NOT NULL AUTO_INCREMENT,
2 `name` VARCHAR(255) NOT NULL,
3 `age` INT(11) NULL DEFAULT NULL,
4 `active` TINYINT(4) NOT NULL DEFAULT '1',
5 `role_id` INT(10) UNSIGNED NOT NULL,
6 `bio` TEXT NOT NULL,
7 
8 `created_at` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
9 `updated_at` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
複製代碼

 

我們會意識到,遷移是多麼的強大,我們自需要記住一些結構生成器方法而不是寫晦澀難懂的SQL DDL代碼。

我們創建了表,那我們想要回滾的時候怎麼辦呢?只需要在於up()方法對應的down()方法中使用drop()方法即可。

1 public function down()
2 {
3         Schema::drop('authors');
4 }

這個方法非常簡單,只有一行。它的全部作用就是刪除”authors”表,如果你熟悉sql,它等同於DROP TABLE authors。

現在,我們已經寫好了架構,我們就可以對數據庫執行遷移文件了。轉到命令行工具,跳轉到應用目錄下,運行artisan migrate命令:

1 php artisan migrate

執行結果如下:

檢查數據庫,你會發現已經有了”authors”表,

 

表結構如下:

 

如果你要使用sql語句實現這張表,那麼sql查詢語句如下:

複製代碼
 1 CREATE TABLE `authors` (
 2         id          int AUTO_INCREMENT NOT NULL,
 3         name        varchar(255) NOT NULL,
 4         age         int,
 5         active      tinyint NOT NULL DEFAULT '1',
 6         role_id     int(10) UNSIGNED NOT NULL,
 7         bio         text NOT NULL,
 8         created_at  timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
 9         updated_at  timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
10         email       varchar(64) NOT NULL,
11         /* Keys */
12         PRIMARY KEY (id)
13 ) ENGINE = InnoDB;
複製代碼

現在假設我們上次的執行存在錯誤想要回滾,我們自需要使用artisan命令行工具執行下面的命令即可:下一次,如果你想修改數據模型,你可以創建一個新的遷移,再次執行命令artisan migrate。每一次執行artisan migrate命令,它都會根據時間戳去檢查哪些沒有執行,如果執行了,就跳到下一個文件,如果沒有執行,就執行這次遷移,直到執行完所有遷移文件。

1 php artisan migrate:rollback

運行如下:

你會發現,表”authors”已經從數據庫中刪除了。

現在重新創建”authors”表,執行artisan migrate命令:

1 php artisan migrate

這時,表”authors”又重新創建了。

但是我想在表中添加”email”列。先使用artisan創建新的遷移文件:

php artisan migrate:make add_email_to_authors_table

運行結果如下:

然後編輯2014_03_12_051119_add_email_to_authors_table.php文件,添加電子郵件列。我們使用Schema::table()方法,有兩個參數:表名、閉包函數(在此函數內添加字段)。

1 public function up()
2 {
3         Schema::table('authors', function($table) {
4                 $table ->string('email', 64);
5         });
6 }

有了添加方法,當然也需要添加回滾方法了,這裏再次使用Schema::table()方法。

1 public function down()
2 {
3         Schema::table('authors', function($table) {
4                 $table ->dropColumn('email');
5         });
6 }

 

上面的方法使用了dropColumn()方法上出列。

現在運行artisan命令運行該遷移文件如下:

 

刷新數據庫表,你會發現”email”字段已經在”authors”中出現了,如下圖:

 

如果我們回滾了這次遷移,那麼email字段會從表中刪除。

Artisan命令還有一個更強大的命令行,它可以回滾所有的遷移:

1 php artisan migrate:reset

表操作

Laravel 方法

目的

create()

用一個名稱創建的表。第二個參數是包含表定義的閉包。

drop()

可以通過drop()方法刪除表。刪除一個表同時會刪除它的所有列和任何索引。

dropIfExists()

刪除表 (如果存在)。

rename($to)

重命名錶。

列操作

Laravel 方法

目的

dropColumn($columns)

刪除指定的列。請記住任何與該列關聯的索引也將被刪除。

dropColumns()

刪除指定的列。

索引的操作

Laravel 方法

目的

primary($columns, $name = null)

指定表的主鍵。

unique($columns, $name = null)

指定表的唯一索引。

index($columns, $name = null)

指定表的索引。

foreign($columns, $name = null)

指定表的外鍵。

dropPrimary($index = null)

刪除給定的主鍵。

dropUnique($index)

刪除給定的唯一鍵。

dropIndex($index)

刪除給定的索引。

dropForeign($index)

刪除給定的外鍵。

 

參考資料:http://laravelbook.com/laravel-migrations-managing-databases

未完待續待續……

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章