Schema & Migration操作
-
Upload
shengyou-fan -
Category
Technology
-
view
7.862 -
download
0
Transcript of Schema & Migration操作
什麼是 artisan?• Laravel 專屬的指令列工具,協助我們完成日常繁瑣工作事務,如:
- 產生 migration、dump auto-load
- 清快取、最佳化、控制 queue
- 互動模式、維護模式
為什麼要用 artisan?• 簡化工作流程,如:
- 自動幫忙產生想要的物件鷹架,可以少打一些程式碼
- 自動最佳化 Laravel、啟動常用的工具
• 簡單來說,就是因為 懶 我們是高效率的攻城獅
如何使用 artisan?• $ php artisan {指令名稱}
• 工作坊截至目前為主,已經使用過的有:
- env
- migrate:install
• 在接下來的各單元內,將依不同主題介紹更多 artisan 指令
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?• 所有對 DB 操作的動作,都撰寫對應的程式碼,透過執行程式來操作資料庫變更
• 每個人拿到更新版本後,透過執行
migrate 就可以有相同的 DB 結構,若有問題也可以 rollback 回之前的狀態
• 可以把它當成資料庫的版本控制系統
怎麼做 Migration?• 先用 artisan 產生 migration 檔
• 使用 Laravel Schema Builder 類別撰寫
migration 檔的內容
• 使用 artisan 執行 migrate
• 可從 phpMyAdmin 裡確認執行後的結果
artisan migrate:make• 產生 migration 檔
- artisan 原生指令,依照給予的 migration
名稱,產生 migration 檔,並執行 dump-
autoload
• 範例:$ php artisan migrate:make create_posts_table
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 語法• 建立資料表
• 重新命名資料表
• 刪除資料表
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');
artisan migrate• 呼叫 artisan 執行 migrate 動作
- 撰寫完 migrate 檔後,要執行此指令才會正式修改資料庫
- artisan 會自動依照 migrations 資料表的紀錄進行版本控管
• 範例:$ php artisan 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 重建所有資料表