默認假設
所有的列在定義的時候都有默認的假設,你可以根據需要重寫。
- 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 方法 |
目的 |
|
用一個名稱創建的表。第二個參數是包含表定義的閉包。 |
|
可以通過 |
|
刪除表 (如果存在)。 |
|
重命名表。 |
列操作
Laravel 方法 |
目的 |
|
刪除指定的列。請記住任何與該列關聯的索引也將被刪除。 |
|
刪除指定的列。 |
索引的操作
Laravel 方法 |
目的 |
|
指定表的主鍵。 |
|
指定表的唯一索引。 |
|
指定表的索引。 |
|
指定表的外鍵。 |
|
刪除給定的主鍵。 |
|
刪除給定的唯一鍵。 |
|
刪除給定的索引。 |
|
刪除給定的外鍵。 |
參考資料:http://laravelbook.com/laravel-migrations-managing-databases
未完待續待續……