全部的列在定義的時候都有默認的假設,你能夠根據須要重寫。php
如今,讓咱們一行行分析結構生成器生成的authors表,下面是up()方法中的代碼:laravel
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代碼爲: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」表,spa
表結構以下:命令行
若是你要使用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 方法 |
目的 |
|
用一個名稱建立的表。第二個參數是包含表定義的閉包。 |
|
能夠經過 |
|
刪除表 (若是存在)。 |
|
重命名錶。 |
Laravel 方法 |
目的 |
|
刪除指定的列。請記住任何與該列關聯的索引也將被刪除。 |
|
刪除指定的列。 |
Laravel 方法 |
目的 |
|
指定表的主鍵。 |
|
指定表的惟一索引。 |
|
指定表的索引。 |
|
指定表的外鍵。 |
|
刪除給定的主鍵。 |
|
刪除給定的惟一鍵。 |
|
刪除給定的索引。 |
|
刪除給定的外鍵。 |
參考資料:http://laravelbook.com/laravel-migrations-managing-databases
未完待續待續……