Laravel4.1數據庫 數據庫遷移案例(四)

建立遷移

首先,讓咱們建立一個MySql數據庫「Laravel_db」。接下來打開app/config目錄下的database.php文件。請確保default鍵值是mysql:php

1 return array(
2         ...
3         'default' => 'mysql',

而後輸入你的數據庫配置信息:mysql

複製代碼

 1 ...
 2 'connections' => array(
 3         'mysql' => array(
 4                 'driver'    => 'mysql',
 5                 'host'      => '127.0.0.1',
 6                 'database'  => 'laravel_db', //數據庫名
 7                 'username'  => 'root, //你的數據庫用戶
 8                 'password'  => 'Your_Database_Password', //數據庫登陸密碼
 9                 'charset'   => 'utf8',
10                 'collation' => 'utf8_unicode_ci',
11                 'prefix'    => '',
12         ),
13 ...

複製代碼

咱們要使用Laravel命令行工具artisan來建立咱們新的遷移。要運行astisan須要打開一個終端,切換路徑到Laravel引用程序文件夾的更目錄。laravel

第一個咱們須要作的就是安裝migrations表,這樣Laravel就能夠追蹤哪些遷移已經運行了。下面的命令將會在數據庫中建立一個特殊的表:sql

1 php artisan migrate:install

以下:數據庫

 

若是建立成功,artisan會返回「Migration table created successfully.」。閉包

查看數據庫,你會發現artisan確實建立了一個新表「migrations」。app

你不須要過於關注這個表。這只是一個幫助Laravel監視遷移的表。當你添加新的遷移,artisan migrate會檢查migrations表並執行那些沒有運行的遷移。工具

如今,讓咱們建立一個實際的遷移文件。我想建立一個名爲「author」的新表。讓咱們運行artisan migrate:make命令:spa

1 php artisan migrate:make create_authors_table

運行截圖以下:命令行

 

你會在app/database/migrations目錄下看到文件2014_03_11_162133_create_authors_table.php。

正如你看到的,一個新的遷移文件名稱中包含時間戳和遷移的描述性名稱。

[注]注意細節的讀者可能會注意到咱們用「authors」問不是「author」命名做者表。這是Laravel設計理念的一方面,使用天然模型幫助咱們存儲數據模型。Laravel的表應該始終命名爲你的數據模型的複數形式。對於Author模型,表就被命名爲「authors」。若是你有一個模型Car,你須要命名錶爲「Cars」。另外,SELECT name FROM authors WHERE id=100SELECT name FROM author WHERE id=100更有意義。

遷移的解剖

遷移是Illuminate\Database\Migrations\MigrationLaravel 類的子類。您建立的類必須至少包含類的兩個方法up()和down()。下面是生成由artisan的骨架遷移類:

複製代碼

 1 <?php
 2 use Illuminate\Database\Schema\Blueprint;
 3 use Illuminate\Database\Migrations\Migration;
 4 
 5 class CreateAuthorsTable extends Migration {
 6 
 7     /**
 8      * Run the migrations.
 9      *
10      * @return void
11      */
12     public function up()
13     {
14         //
15     }
16 
17     /**
18      * Reverse the migrations.
19      *
20      * @return void
21      */
22     public function down()
23     {
24         //
25     }
26 }

複製代碼

使用Laravel,咱們能夠在任什麼時候間遷移到數據模型的特定版本。Up()方法中的代碼執行向前遷移,down()執行反向遷移(建立數據庫的新版本或者回滾到前一個版本)。

很容易想到up()執行遷移文件操做,down()是徹底相反。就像word文檔中的撤銷命令——撤銷所作的修改。例如,咱們想建立一個「authors」表,在up()中建立,在down()中撤銷。讓咱們看看應該怎麼作。

Artisan migrate:make命令有一些能夠加快你工做流的其餘選項。讓咱們運行下面命令:

1 php artisan migrate:make create_authors_table --table authors --create

在上面的例子中,咱們使用—table選項指定表名。另外,我添加了—create選項去告知artisan這個表須要被建立。若是咱們打開遷移文件,你會發現artisan爲咱們生成了額外的樣板文件代碼:

複製代碼

 1 <?php
 2 use Illuminate\Database\Schema\Blueprint;
 3 use Illuminate\Database\Migrations\Migration;
 4 
 5 class CreateAuthorsTable extends Migration {
 6 
 7     /**
 8      * Run the migrations.
 9      *
10      * @return void
11      */
12     public function up()
13     {
14         Schema::table('authors', function(Blueprint $table)
15         {
16             //
17         });
18     }
19 
20     /**
21      * Reverse the migrations.
22      *
23      * @return void
24      */
25     public function down()
26     {
27         Schema::table('authors', function(Blueprint $table)
28         {
29             //
30         });
31     }
32 }

複製代碼

很是棒!如今,讓咱們作更加具體的工做。咱們要使用的 Laravel Schema類來建立咱們的"Authors"表。下面是建立做者表,並將必要的列添加到表的遷移代碼:

複製代碼

 1 public function up()
 2 {
 3      Schema::create('authors', function(Blueprint $table)
 4     {
 5             // auto increment id (primary key)
 6             $table->increments('id');
 7 
 8             $table->string('name');
 9             $table->integer('age')->nullable();
10             $table->boolean('active')->default(1);
11             $table->integer('role_id')->unsigned();
12             $table->text('bio');
13 
14             // created_at, updated_at DATETIME
15             $table->timestamps();
16       });
17 }

複製代碼

咱們調用Schema::create()方法建立一個新表「authors」。Schema::create()方法有兩個參數:表名和一個閉包,閉包中包含了列定義。

閉包中,咱們可使用$table參數建立列。列定義方法的基本結構是:

1 $table->column_type(column_name)

列類型

在前面的示例中,咱們指定的名稱列的類型爲"string"。但這是什麼意思?數據庫中一般沒有」string」類型的列。

請記住,Laravel 試圖使您的應用程序獨立於底層的數據庫;例如,若是你想,你可使用 MySql 開發並部署到 Postgresql。若是您在遷移中使用 MySql 的列類型,應用到 Postgres 數據庫可能沒法工做。因此,Laravel 遷移經過使用通用的數據類型使你與底層的數據庫類型系統隔離。若是咱們要遷移 MySql 數據庫, string()方法將建立VARCHAR(255)類型的列。在 Postgres,同一遷移可能會添加CHAR VARYING(255)類型的列 (雖然VARCHAR類型支持全部主要的數據庫平臺)。

Laravel 直接支持如下數據類型:

Laravel 方法

列的類型

increments($column)

向表中添加自動遞增的主鍵

string($column)

添加一個VARCHAR(255)列

string($column, $length)

添加具備長度的VARCHAR

integer($column)

向表中添加一個INTEGER列,

float($column)

向表中添加一個FLOAT的列

decimal($column, $precision, $scale)

添加一個DECIMAL列的精度和小數位數。精度是總數中數字的位數。規模是小數點的右側的位數。例如,數 123.45 具備精度爲 5 和 2 的小數。從邏輯上講,規模不能大於精度。

boolean($column)

向表中添加一個BOOLEAN的列。注意: 存儲布爾值的方式而有所不一樣從一個數據庫到另外一個數據庫。一些使用"1"和"0"的整數值來表示 true 和 false,個別的,其餘人使用"T"和"F"等字符。Laravel 的"boolean"類型映射到數據庫的全部系統上的small integer列。Laravel 很好的處理 PHP 的true與false之間的映射,因此你不須要擔憂。

text($column)

至關於表的TEXT

blob($column)

至關於表的BLOB

binary($column)

至關於表的BINARY

dateTime($column)

至關於表DATETIME

timestamp($column)

至關於表TIMESTAMP

date($column)

至關於表的DATE

time($column)

至關於表的TIME

enum($column, array $allowed)

在表上建立一個新的ENUM列

此外,還有幾個你須要知道的擴展方法:

Laravel 方法

列的類型

timestamps()

timestamps()與timestamp()不一樣。它是一個 Laravel 用來管理建立和修改做爲created_at和updated_at TIMESTAMP列的便利方法。他們是 Laravel 能夠本身修改的兩個特殊的數據庫列。created_at列爲僅當行被建立時當前時間戳。另外一方面, updated_at被修改成每次操做的行的數據時當前時間戳。

nullable()

將指定列容許NULL值。默認狀況下,Laravel 使在數據庫級別須要經過添加NOT NULL約束的列。

default($value)

設置要用於新行做爲初始值的列的默認值。你永遠不須要顯式設置的默認值爲 null。不設置它默認值就爲null。

unsigned()

設置INTEGER列爲UNSIGNED。

 

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

 

未完待續……

相關文章
相關標籤/搜索