Laravel学习笔记(四)数据库 数据库迁移案例
創建遷移
首先,讓我們創建一個MySql數據庫“Laravel_db”。接下來打開app/config目錄下的database.php文件。請確保default鍵值是mysql:
1 return array( 2 ... 3 'default' => '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引用程序文件夾的更目錄。
第一個我們需要做的就是安裝migrations表,這樣Laravel就可以追蹤哪些遷移已經運行了。下面的命令將會在數據庫中創建一個特殊的表:
1 php artisan migrate:install如下:
?
如果創建成功,artisan會返回“Migration table created successfully.”。
查看數據庫,你會發現artisan確實創建了一個新表“migrations”。
你不需要過于關注這個表。這只是一個幫助Laravel監視遷移的表。當你添加新的遷移,artisan migrate會檢查migrations表并執行那些沒有運行的遷移。
現在,讓我們創建一個實際的遷移文件。我想創建一個名為“author”的新表。讓我們運行artisan migrate:make命令:
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=100比SELECT name FROM author WHERE id=100更有意義。
遷移的解剖
遷移是Illuminate\Database\Migrations\MigrationLaravel 類的子類。您創建的類必須至少包含類的兩個方法up()和down()。下面是生成由artisan的骨架遷移類:
1 <?php2 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 <?php2 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/
轉載于:https://www.cnblogs.com/Jerry-blog/p/5010079.html
總結
以上是生活随笔為你收集整理的Laravel学习笔记(四)数据库 数据库迁移案例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【android】如何让WebView对
- 下一篇: JDBC链接MySQL和Oracle