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:generate
Application	
  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 功能,協助我們產生資料庫內
的測試資料

Schema & Migration操作

  • 1.
    Laravel 工作坊 Schema/Migration 操作 shengyou@ 彰師大資工系學會 (2014.12.07)
  • 2.
    階段任務 • 學習常用 artisan指令 • 學習建立 migration • 學習使用 Schema Builder 建立資料庫結構 • 透過 artisan 指令執行資料庫結構的變更
  • 3.
  • 4.
    什麼是 artisan? • Laravel專屬的指令列工具,協助我們完成 日常繁瑣工作事務,如: - 產生 migration、dump auto-load - 清快取、最佳化、控制 queue - 互動模式、維護模式
  • 5.
    為什麼要用 artisan? • 簡化工作流程,如: -自動幫忙產生想要的物件鷹架,可以少 打一些程式碼 - 自動最佳化 Laravel、啟動常用的工具 • 簡單來說,就是因為 懶 我們是高效率的 攻城獅
  • 6.
    如何使用 artisan? • $php artisan {指令名稱} • 工作坊截至目前為主,已經使用過的有: - env - migrate:install • 在接下來的各單元內,將依不同主題介紹 更多 artisan 指令
  • 7.
    artisan env • 測試Laravel 目前所在環境 - artisan 會回傳目前 Laravel 目前的環境變 數設定 • 範例: $  php  artisan  env
  • 8.
    artisan migrate:install • 產生migrations 資料表 - artisan 會使用目前的環境設定連線至資 料庫,並安裝一個名為 migrations 的資 料表 • 範例: $  php  artisan  migrate:install
  • 9.
    artisan key:generate • 產生App 加密金鑰 - 若使用 composer 建立專案的話,則會 自動執行 個指令 • 範例: $  php  artisan  key:generate Application  key  [xxxxxxxxxxxxxxxxxx]  set  successfully
  • 10.
    artisan dump-autoload • 掃描現有專案目錄,建立class map - artisan 會掃描現有的專案目前資料夾, 並把所有類別及 名做成一個 class map 對照表。(若有手動新增 案時,記得執 行此指令) • 範例: $  php  artisan  dump-­‐autoload
  • 11.
  • 12.
    什麼是 Migration? • 所有對DB 操作的動作,都 寫對應的程 式碼,透過執行程式來操作資料庫變更 • 每個人拿到更新版本後,透過執行 migrate 就可以有相同的 DB 結構,若有問 題也可以 rollback 回之前的狀態 • 可以把它當成資料庫的版本控制系統
  • 13.
    為什麼要用 Migration? • 多人開發時,因為新功能而需要修改DB 結構,若沒有 Migration 則其他人就無法 知道 DB 的差異; 署時,DB 的修改沒 有紀錄、若有狀況也無從回復
  • 14.
  • 15.
    怎麼做 Migration? • 先用artisan 產生 migration • 使用 Laravel Schema Builder 類別 寫 migration 的內容 • 使用 artisan 執行 migrate • 可從 phpMyAdmin 裡確認執行後的結果
  • 16.
    產生 migrate 使用 artisanmigrate:make 產生 migrate
  • 17.
    artisan migrate:make • 產生migration - artisan 原生指令,依照給予的 migration 名稱,產生 migration ,並執行 dump- autoload • 範例: $  php  artisan  migrate:make  create_posts_table
  • 18.
    產生 migrate 使用 artisangenerate:migrations 產生 migrate
  • 19.
    artisan generate:migration • 產生migration - generator 版的產生 migration 指令,優 點在於透過 migration 名的保留字,預 先產生 Schema Builder 語法 • 範例: $  php  artisan  generate:migration  create_posts_table
  • 20.
    Migration 案結構 • 分成up / down (前進/後退) - up 寫要做變更的內容 (新增、刪除、 重新命名) - down 是寫如何將 up 的內容做還原 (刪 除、新增、重新命名) ★ 參考:http://laravel.tw/docs/migrations
  • 21.
    Schema Builder 語法 在migrate 裡 寫 up/down 內容
  • 22.
    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
  • 23.
    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
  • 24.
    Schema Builder 語法 •增加 index • after 語法 ★ 語法參考:http://laravel.tw/docs/4.2/schema#adding-indexes $table-­‐>string('email')-­‐>unique(); $table-­‐>string('name')-­‐>after('email');
  • 25.
  • 26.
    artisan migrate • 呼叫artisan 執行 migrate 動作 - 寫完 migrate 後,要執行此指令才 會正式修改資料庫 - artisan 會自動依照 migrations 資料表的 紀錄進行版本控管 • 範例: $  php  artisan  migrate
  • 27.
  • 28.
    其他 migrate 指令 •還原 • 回到最初 • 回到最初後再重 一次 $  php  artisan  migrate:rollback $  php  artisan  migrate:reset $  php  artisan  migrate:refresh
  • 29.
    小技巧 • 在輸入 migration名稱時打錯字怎麼辦? - 先 rollback,重新命名 Class 名稱及 案 名稱,再執行 dump-autoload 及 migrate 指令 - 把產生出來的 案手動刪除掉、資料庫 內資料表 掉,再重新產生一次
  • 30.
    小技巧 • 不小心把 migration資料表弄壞、弄亂無 法復原時怎麼辦? - 試試 php artisan migrate:reset - 把所有資料表全部手動刪除,再重新 一次 php artisan migrate 重建所有資料表
  • 31.
    存 點 • 試著把現在已經可以運作的程式碼加入版 本控制內 •流程提醒: - working directory > staging area > commit
  • 32.
    階段檢查表 • 確認產生出 3個 migration • 確認 DB 裡目前有 4 個資料表,分別為: migrations、posts、categories、comments
  • 33.
  • 34.
    單元小結 • 在 個單元裡,我們說明如何使用Laravel 的 Migration 功能為資料庫做版本控制, 並將 Blog 所需要的有個資料表建立完成 • 下一個單元,我們將學習如何使用 Laravel 的 Seeding 功能,協助我們產生資料庫內 的測試資料