Laravel4.1數據庫 數據庫遷移案例2——建立數據結構,數據表,修改數據結構(五)

默認假設

全部的列在定義的時候都有默認的假設,你能夠根據須要重寫。php

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

如今,讓咱們一行行分析結構生成器生成的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 方法

目的

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

未完待續待續……

相關文章
相關標籤/搜索