Upload
shengyou-fan
View
7.647
Download
2
Embed Size (px)
Citation preview
Laravel 工作坊Model/Seeding 整合
shengyou @ 彰師大資工系學會 (2014.12.07)
階段任務• 了解 Laravel 的 Model 設定及命名慣例
• 學習如何使用 Laravel 的 Seeding 功能
建立 Model
Model• 統一放置在 app/models/{model}.php
• 一個資料表就是一群資料的集合,每一筆資料 (row) 就對應一個 Model 實體
• 在 Laravel 的慣例裡,資料表的名稱用英文複數;而 Model 的名稱就用英文單數
★ 參考:http://laravel.tw/docs/4.2/eloquent#basic-usage
Model 檔案結構• 一個最精簡的 Model 檔案只需三行
• 若要強制指定對應的資料表名稱,則再加一行
class Post extends \Eloquent{}
class Post extends \Eloquent{ protected $table = ‘posts’;}
手動建立 Model• 在 app/models/ 底下新增 {‘M’odel (單數)}.php
• 輸入 Model 程式碼 (精簡三行)
• 執行 php artisan dump-autoload 讓新建好的 Model 寫入 class map 內
Model 語法一個基本的 Model 語法
artisan generate:model• 產生 Model 檔案
- artisan 內建沒有產生 Model 檔的指令,但可用 generator 產生
• 範例:$ php artisan generate:model post
產生 model 檔透過 generator 產生 model
強制設定資料表名稱若資料表已經存在 (Ex. 維護舊專案),可強制指定資料表名稱
generator 的設定generator 會多產生 fillable 屬性,後續 CRUD 章節再說明
存檔點• 試著把現在已經可以運作的程式碼加入版本控制內
• 流程提醒:
- working directory > staging area > commit
使用 Seeding
什麼是 Seeding?• 在開發過程中,往往會需要測試資料來做列表顯示、刪除、修改來確認程式功能,而資料的內容不必是真的
• 透過 Laravel 的 table seeder,可以快速的產生測試並倒進資料庫,方便開發 CRUD
這種以資料操作為主的功能
為什麼要用 Seeding?• 有測試資料很方便,但自己產生/建立很花時間;若這個動作要重複做很多遍是非常累人也浪費時間的事
• 用 Seeding 後,可以快速的讓 DB 內有測試資料可以使用,寫 DB 資料操作的相關功能時,開發效率大增
Seeds• 統一放置在 app/database/seeds/{seed}.php
• 檔案命名慣例為 {‘M’odel 名稱}TableSeeder
• 每一個 Seeder 檔案裡只有一個 run 函式
• 函式內可以寫想要產生測試資料的規則
• 記得要在 DatabaseSeeder 裡呼叫
★ 參考:http://laravel.tw/docs/migrations#database-seeding
Seeder 檔案結構• 一個基礎的 Seeder 結構,只有 run 函式
class PostTableSeeder extends Seeder{ public function run() { // 自行撰寫產生測試資料的規則 }}
手動建立 Seeder• 在 app/models/ 底下新增 {‘M’odel (單數)}
TableSeeder.php
• 輸入 Seeder 程式碼 (run 函式內容)
• 執行 php artisan dump-autoload 讓新建好的 Model 寫入 class map 內
artisan generate:seed• 產生 Seeder 檔案
- artisan 內建沒有產生 Seeder 檔的指令,但可用 generator 產生
• 範例:$ php artisan generate:seed post
產生 seeder 檔使用 generator 產生 seeder 檔
撰寫資料產生規則
設定 DatabaseSeeder在 DatabaseSeeder 內呼叫要執行的 Seed Class
執行 Seeding使用 artisan 執行 db:seed
artisan db:seed• 執行 Seeding
- 呼叫 DatabaseSeeder,把其中所有的
Seeder 跑一遍
- 加參數 --class={Model}TableSeeder 可以只執行某一個 Seeder
• 範例:$ php artisan db:seed$ php artisan db:seed -‐-‐class=PostTableSeeder
資料庫內驗證
新增資料前清空資料• artisan db:seed 指令只會單純的執行 run 的內容,因此若指令一直下,假資料就會一直增加
• 使用 DB 物件在 Seeding 之前先清空資料表,假資料才不會一直長、一直長…
• 範例:DB::table(‘{資料表名稱}’)-‐>truncate();
讓資料多點隨機感• 設定 rand 函式產生 category_id 及
post_id,讓對應可以更隨機一些
• 用 Carbon 控制日期時間的產生,讓資料不會都在同一天寫入
• 範例:‘category_id’ => rand(1, 4);
‘created_at’ => \Carbon\Carbon::now()-‐>addDays($index);
★ 參考:https://github.com/briannesbitt/Carbon
讓假資料更真!• 配合 Faker 套件,讓產生出來的測試資料更像真的一樣 (有 Fu!)
• composer.json 內新增 faker 套件,再執行
composer update
• 寫 Seeder 檔時,引入 Faker 類別
• 若使用 generator 的話,會自動幫你寫好
★ 參考:https://github.com/fzaninotto/Faker
更多 Faker 應用教學• Simplifying Test Data Generation with Faker
- http://www.sitepoint.com/simplifying-test-data-generation-with-faker/
• Build a Database with Eloquent, Faker and Flysystem
- http://www.sitepoint.com/build-database-eloquent-faker-flysystem/
存檔點• 試著把現在已經可以運作的程式碼加入版本控制內
• 流程提醒:
- working directory > staging area > commit
階段檢查表• 確認有產生 3 個 Model 檔
• 確認有產生 3 個 Seeder 檔,並設定好
DatabaseSeeder
• 確認 DB 內已經有產生出來的測試資料
問與答學員可開始練習、實作
單元小結• 在這個單元裡,我們說明如何設定 Laravel
的 Model 及命名慣例,並用 Seeding 技巧產生資料庫內的假資料
• 下一個單元,我們將學習如何使用 Laravel
的 ORM 來操作資料庫內的資料