schema & migration操作

34
Laravel 工作坊 Schema/Migration 操作 shengyou @ 彰師大資工系學會 (2014.12.07)

Upload: shengyou-fan

Post on 06-Aug-2015

7.862 views

Category:

Technology


0 download

TRANSCRIPT

Laravel 工作坊Schema/Migration 操作

shengyou @ 彰師大資工系學會 (2014.12.07)

階段任務• 學習常用 artisan 指令

• 學習建立 migration

• 學習使用 Schema Builder 建立資料庫結構

• 透過 artisan 指令執行資料庫結構的變更

Artisan 指令

什麼是 artisan?• Laravel 專屬的指令列工具,協助我們完成日常繁瑣工作事務,如:

- 產生 migration、dump auto-load

- 清快取、最佳化、控制 queue

- 互動模式、維護模式

為什麼要用 artisan?• 簡化工作流程,如:

- 自動幫忙產生想要的物件鷹架,可以少打一些程式碼

- 自動最佳化 Laravel、啟動常用的工具

• 簡單來說,就是因為 懶 我們是高效率的攻城獅

如何使用 artisan?• $ php artisan {指令名稱}

• 工作坊截至目前為主,已經使用過的有:

- env

- migrate:install

• 在接下來的各單元內,將依不同主題介紹更多 artisan 指令

artisan env• 測試 Laravel 目前所在環境

- artisan 會回傳目前 Laravel 目前的環境變數設定

• 範例:$  php  artisan  env

artisan migrate:install• 產生 migrations 資料表

- artisan 會使用目前的環境設定連線至資料庫,並安裝一個名為 migrations 的資料表

• 範例:$  php  artisan  migrate:install

artisan key:generate• 產生 App 加密金鑰

- 若使用 composer 建立專案的話,則會自動執行這個指令

• 範例:$  php  artisan  key:generateApplication  key  [xxxxxxxxxxxxxxxxxx]  set  successfully

artisan dump-autoload• 掃描現有專案目錄,建立 class map

- artisan 會掃描現有的專案目前資料夾,並把所有類別及檔名做成一個 class map

對照表。(若有手動新增檔案時,記得執行此指令)

• 範例:$  php  artisan  dump-­‐autoload

建立 Migration

什麼是 Migration?• 所有對 DB 操作的動作,都撰寫對應的程式碼,透過執行程式來操作資料庫變更

• 每個人拿到更新版本後,透過執行

migrate 就可以有相同的 DB 結構,若有問題也可以 rollback 回之前的狀態

• 可以把它當成資料庫的版本控制系統

為什麼要用 Migration?• 多人開發時,因為新功能而需要修改 DB

結構,若沒有 Migration 則其他人就無法知道 DB 的差異;佈署時,DB 的修改沒有紀錄、若有狀況也無從回復

DB 規劃

怎麼做 Migration?• 先用 artisan 產生 migration 檔

• 使用 Laravel Schema Builder 類別撰寫

migration 檔的內容

• 使用 artisan 執行 migrate

• 可從 phpMyAdmin 裡確認執行後的結果

產生 migrate 檔使用 artisan migrate:make 產生 migrate 檔

artisan migrate:make• 產生 migration 檔

- artisan 原生指令,依照給予的 migration

名稱,產生 migration 檔,並執行 dump-

autoload

• 範例:$  php  artisan  migrate:make  create_posts_table

產生 migrate 檔使用 artisan generate:migrations 產生 migrate 檔

artisan generate:migration

• 產生 migration 檔

- generator 版的產生 migration 指令,優點在於透過 migration 檔名的保留字,預先產生 Schema Builder 語法

• 範例:$  php  artisan  generate:migration  create_posts_table

Migration 檔案結構• 分成 up / down (前進/後退)

- up 撰寫要做變更的內容 (新增、刪除、重新命名)

- down 是寫如何將 up 的內容做還原 (刪除、新增、重新命名)

★ 參考:http://laravel.tw/docs/migrations

Schema Builder 語法在 migrate 檔裡撰寫 up/down 內容

Schema Builder 語法• 建立資料表

• 重新命名資料表

• 刪除資料表

Schema::create('users',  function($table){        $table-­‐>increments('id');});

Schema::rename($from,  $to);

Schema::drop('users');

★ 語法參考:http://laravel.tw/docs/4.2/schema#creating-and-dropping-tables

Schema Builder 語法• 建立欄位

• 重新命名欄位

• 刪除欄位

Schema::table('users',  function($table){        $table-­‐>string('email');});

Schema::table('users',  function($table){        $table-­‐>renameColumn('from',  'to');});

Schema::table('users',  function($table){        $table-­‐>dropColumn('votes');});

(要額外安裝  doctrine/dbal  套件)

★ 語法參考:http://laravel.tw/docs/4.2/schema#adding-columns

Schema Builder 語法• 增加 index

• after 語法

★ 語法參考:http://laravel.tw/docs/4.2/schema#adding-indexes

$table-­‐>string('email')-­‐>unique();

$table-­‐>string('name')-­‐>after('email');

執行 migrate透過 artisan 執行 migrate

artisan migrate• 呼叫 artisan 執行 migrate 動作

- 撰寫完 migrate 檔後,要執行此指令才會正式修改資料庫

- artisan 會自動依照 migrations 資料表的紀錄進行版本控管

• 範例:$  php  artisan  migrate

檢查 DB 修改結果

新建的資料表

Laravel 的 migrate 版次紀錄

其他 migrate 指令• 還原

• 回到最初

• 回到最初後再重跑一次

$  php  artisan  migrate:rollback

$  php  artisan  migrate:reset

$  php  artisan  migrate:refresh

小技巧• 在輸入 migration 名稱時打錯字怎麼辦?

- 先 rollback,重新命名 Class 名稱及檔案名稱,再執行 dump-autoload 及 migrate

指令

- 把產生出來的檔案手動刪除掉、資料庫內資料表砍掉,再重新產生一次

小技巧• 不小心把 migration 資料表弄壞、弄亂無法復原時怎麼辦?

- 試試 php artisan migrate:reset

- 把所有資料表全部手動刪除,再重新跑一次 php artisan migrate 重建所有資料表

存檔點• 試著把現在已經可以運作的程式碼加入版本控制內

• 流程提醒:

- working directory > staging area > commit

階段檢查表• 確認產生出 3 個 migration 檔

• 確認 DB 裡目前有 4 個資料表,分別為:migrations、posts、categories、comments

問與答學員可開始練習、實作

單元小結• 在這個單元裡,我們說明如何使用 Laravel

的 Migration 功能為資料庫做版本控制,並將 Blog 所需要的有個資料表建立完成

• 下一個單元,我們將學習如何使用 Laravel

的 Seeding 功能,協助我們產生資料庫內的測試資料