Zi 字媒體
2017-07-25T20:27:27+00:00
Database Migrations
PHP:7.2
Laravel:5.7
Laravel 提供了一個 DB Migration 的功能,可以快速管理、產生專案的資料庫,適合用在測試或一些較小型的專案部署上。
Generating Migrations
在開始之前,必須先描述好 DB 的型態、欄位等等資訊,因此需要先產生 Migration File 來紀錄 DB 的資訊。
透過 artisan make:migration 就可以直接產生 Migration File:
php artisan make:migration create_member_table
artisan 會自動產生以 時間 + 檔名命名,而且已經寫好基本的 DB 設定的檔案,並存放在 database/migrations。
以下為自動產生出來檔案內容,註解已經說明很清楚,當執行 migration 後會根據 up() 描述管理 DB,而 down() 就是還原時所執行的 method。
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateMemberTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('member', function (Blueprint $table) {
$table->increments('id');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('member');
}
}
在利用 artisan 產生 Migration File 時,artisan 會根據 create__table 這樣的 pattern 在 up() 與 down() 的 method 裡自動產生建立 table 的設定。因此,如果你的檔名不是這種 pattern 的話,會得到兩個空的 method。
當然,這樣子的限制並不是絕對,只是讓開發者方便使用而已,如果真的不想用這樣子的命名方式也是可以使用的。
// 與 create_member_table 建出來的檔案相同
php artisan make:migration member --create=member
// 會產生 Schema::table 的設定,用於修改資料表
php artisan make:migration member --table=member
Running Migrations
Notice: 操作 migrate 需要先設定好 DB 設定,確定資料庫連線之後才能操作。
執行 migrate
php artisan migrate
順利執行以後,資料庫中除了出現原本設定 member 的 table,同時也出現了一張 migrations 的 table。migrations 會用來紀錄你的 Migration File 及批次(batch)的紀錄。
在 migrate member 之後,如果再產生一個新的 Migration File,並執行,那系統會針對沒有 migrate 過的檔案做處理,而第二次 migrate 的檔案,在 migrations table 的批次(batch) 就會變成 2。
範例
php artisan make:migration create_product_table
php artisan migrate
還原上一次的 migrate
# 針對最後一個批次進行還原
php artisan migrate:rollback
查看 migrate 狀態
php artisan migrate:status
全數 reset
php artisan migrate:reset
Migration Structure
在說明完如何執行 migrate 之後,接下來介紹一下如何撰寫 Migration File 中 DB 的設定。
Create table 範例
Schema::create('member', function (Blueprint $table) {
$table->increments('id'); // 建立 increments key
$table->integer('label_id'); // 設定 Ingeger
$table->string('name', 70); // 設定字串及長度
$table->tinyInteger('is_enabled')->default(1); // 設定 tinyInteger 及預設值
$table->timestamps(); // 建立 created_at and updated_at
});
Notice: 如果需要透過 migrate 修改 column,必須再多 require 一個 dbal 套件
composer require doctrine/dbal
Update table 範例
Schema::table('member', function (Blueprint $table) {
$table->string('name', 20)->change(); // 修改 name 欄位的長度
$table->string('email', 50)->after('name'); // 新增 email 欄位在 name 之後
$table->renameColumn('is_enabled', 'status'); // 修改欄位名稱
});
其他細節可以參考官網文件:migrations
Categories: Laravel
Tags: LaravelPHP
分類
Android
AngularJS
Chrome
Database
MySQL
DataStructure
Editor
Vim
Firefox
Git
Hadoop
Language
Go
Java
JavaScript
jQuery
jQueryChart
Node.js
Vue
PHP
Laravel
ZendFramework
Python
Mac
Network
Cisco
DLink
Juniper
Oauth
Server
Apache
Share
Unix
FreeBSD
Linux
WebDesign
Bootstrap
CSS
HTML
Wordpress
Search
搜尋:
寫了
5860316篇文章,獲得
23313次喜歡