Migration

這裏會介紹如何在 Laravel 5 使用 Migration 管理資料庫

Migration 指令

建立 Migration

$ php artisan make:migration create_users_table --create="users"

Migration 建立之後的檔案會放在 database/migrations/2015_04_11_134630_create_users_table.php

Migration 檔案最前面的日期會依照你建立 Migration 的時間自動產生,所以每個人看到的檔名皆會不同 在後面加了 --create 的參數可以告訴 Migration,我們要做建立 user 資料表的動作,檔案內容會像這樣:

<?php
// database/migrations/2015_04_11_134630_create_users_table.php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateUsersTable extends Migration {

    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('users', function(Blueprint $table)
        {
            $table->increments('id');
            $table->timestamp();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('users');
    }

}

異動資料表欄位資料

如果我們要在 users 資料表中加欄位(或是其他改變資料表結構),我們可以用這樣的指令去建立 Migration

$ php artisan make:migration add_email_to_users_table --table="users"

在後面加了 --table 的參數可以告訴 Migration,我們要做異動 user 資料表的動作,檔案內容會像這樣:

<?php
// database/migrations/2015_04_12_154720_add_email_to_users_table.php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class AddEmailToUsersTable extends Migration {

    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('users', function(Blueprint $table)
        {
          $table->string('email', 180);
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('users', function(Blueprint $table)
        {
          $table->dropColumn('email');
        });
    }

}

原先的建立資料表會用 Schema::create(),而異動資料表則會用 Schema::table() 去做異動

列出目前所有 Migration 狀態

$ php artisan migrate:status

執行 Migration

$ php artisan migrate

恢復上一版本的 Migration

$ php artisan migrate:rollback

清除所有版本的 Migration

$ php artisan migrate:reset

清除所有版本的 Migration 並重新執行

$ php artisan migrate:refresh

備註

欄位異動

若做欄位異動 Migration 後需要 rollback,若丟出例外錯誤時,則使用 composer 安裝 doctrine/dbal 後即可解決 rollback 的問題

$ composer require doctrine/dbal

安全性

在剛開始開發產品的時候,有時候資料表有做小小的修改或異動,為了圖方便,我們常常會使用 migrate:resetmigrate:refresh 去清空我們的資料,重建資料表。

但如果產品已經上線了,這個指令就會是一個非常危險的指令,企業產品最重要的資產就是資料,這個指令會導致所有的資料都被清除,所以請上線後小心謹慎去使用。

參考資料

KeJyun 最新新書推薦
- Laravel 5 for beginner 新手道場:優雅運用框架快速開發 PHP 網站
- Laravel框架开发详解:从零基础到运用框架快速开发PHP网站

Laravel 是 PHP 的框架(Framework),提供了很多開發網站或 API 所需的工具及環境,經過簡單的設定就可以完成資料的處理及顯示,使開發者可以很優雅且快速的開發出各個不同的產品。本書適合有 PHP 基礎的人,但不知道要怎麼選擇框架,或者不用框架的人也能夠明白它的好處。

雖然 WordPress 也能夠架站,但如果有客製化需求,要開發各式各樣的網站,或提供 App 使用的 API,如此一來你只能選擇用框架,而 Laravel 是目前最受歡迎的。

本書將解說為什麼要使用框架,以及理解框架的優缺點後,要怎麼選擇框架,並用框架快速建構一個網站。除非必要,否則書中會避免專業技術用語,盡量使用最生活化易懂的例子及語氣,讓大家更容易進入 Laravel 的世界。

Laravel 5 for beginner 新手道場:優雅運用框架快速開發 PHP 網站

購書連結

Laravel框架开发详解:从零基础到运用框架快速开发PHP网站

購書連結

comments powered by Disqus