model & seeding整合

33
Laravel 工作坊 Model/Seeding 整合 shengyou @ 彰師大資工系學會 (2014.12.07)

Upload: shengyou-fan

Post on 06-Aug-2015

7.654 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Model & Seeding整合

Laravel 工作坊Model/Seeding 整合

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

Page 2: Model & Seeding整合

階段任務• 了解 Laravel 的 Model 設定及命名慣例

• 學習如何使用 Laravel 的 Seeding 功能

Page 3: Model & Seeding整合

建立 Model

Page 4: Model & Seeding整合

Model• 統一放置在 app/models/{model}.php

• 一個資料表就是一群資料的集合,每一筆資料 (row) 就對應一個 Model 實體

• 在 Laravel 的慣例裡,資料表的名稱用英文複數;而 Model 的名稱就用英文單數

★ 參考:http://laravel.tw/docs/4.2/eloquent#basic-usage

Page 5: Model & Seeding整合

Model 檔案結構• 一個最精簡的 Model 檔案只需三行

• 若要強制指定對應的資料表名稱,則再加一行

class  Post  extends  \Eloquent{}

class  Post  extends  \Eloquent{        protected  $table  =  ‘posts’;}

Page 6: Model & Seeding整合

手動建立 Model• 在 app/models/ 底下新增 {‘M’odel (單數)}.php

• 輸入 Model 程式碼 (精簡三行)

• 執行 php artisan dump-autoload 讓新建好的 Model 寫入 class map 內

Page 7: Model & Seeding整合

Model 語法一個基本的 Model 語法

Page 8: Model & Seeding整合

artisan generate:model• 產生 Model 檔案

- artisan 內建沒有產生 Model 檔的指令,但可用 generator 產生

• 範例:$  php  artisan  generate:model  post

Page 9: Model & Seeding整合

產生 model 檔透過 generator 產生 model

Page 10: Model & Seeding整合

強制設定資料表名稱若資料表已經存在 (Ex. 維護舊專案),可強制指定資料表名稱

Page 11: Model & Seeding整合

generator 的設定generator 會多產生 fillable 屬性,後續 CRUD 章節再說明

Page 12: Model & Seeding整合

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

• 流程提醒:

- working directory > staging area > commit

Page 13: Model & Seeding整合

使用 Seeding

Page 14: Model & Seeding整合

什麼是 Seeding?• 在開發過程中,往往會需要測試資料來做列表顯示、刪除、修改來確認程式功能,而資料的內容不必是真的

• 透過 Laravel 的 table seeder,可以快速的產生測試並倒進資料庫,方便開發 CRUD

這種以資料操作為主的功能

Page 15: Model & Seeding整合

為什麼要用 Seeding?• 有測試資料很方便,但自己產生/建立很花時間;若這個動作要重複做很多遍是非常累人也浪費時間的事

• 用 Seeding 後,可以快速的讓 DB 內有測試資料可以使用,寫 DB 資料操作的相關功能時,開發效率大增

Page 16: Model & Seeding整合

Seeds• 統一放置在 app/database/seeds/{seed}.php

• 檔案命名慣例為 {‘M’odel 名稱}TableSeeder

• 每一個 Seeder 檔案裡只有一個 run 函式

• 函式內可以寫想要產生測試資料的規則

• 記得要在 DatabaseSeeder 裡呼叫

★ 參考:http://laravel.tw/docs/migrations#database-seeding

Page 17: Model & Seeding整合

Seeder 檔案結構• 一個基礎的 Seeder 結構,只有 run 函式

class  PostTableSeeder  extends  Seeder{        public  function  run()        {                //  自行撰寫產生測試資料的規則        }}

Page 18: Model & Seeding整合

手動建立 Seeder• 在 app/models/ 底下新增 {‘M’odel (單數)}

TableSeeder.php

• 輸入 Seeder 程式碼 (run 函式內容)

• 執行 php artisan dump-autoload 讓新建好的 Model 寫入 class map 內

Page 19: Model & Seeding整合

artisan generate:seed• 產生 Seeder 檔案

- artisan 內建沒有產生 Seeder 檔的指令,但可用 generator 產生

• 範例:$  php  artisan  generate:seed  post

Page 20: Model & Seeding整合

產生 seeder 檔使用 generator 產生 seeder 檔

Page 21: Model & Seeding整合

撰寫資料產生規則

Page 22: Model & Seeding整合

設定 DatabaseSeeder在 DatabaseSeeder 內呼叫要執行的 Seed Class

Page 23: Model & Seeding整合

執行 Seeding使用 artisan 執行 db:seed

Page 24: Model & Seeding整合

artisan db:seed• 執行 Seeding

- 呼叫 DatabaseSeeder,把其中所有的

Seeder 跑一遍

- 加參數 --class={Model}TableSeeder 可以只執行某一個 Seeder

• 範例:$  php  artisan  db:seed$  php  artisan  db:seed  -­‐-­‐class=PostTableSeeder

Page 25: Model & Seeding整合

資料庫內驗證

Page 26: Model & Seeding整合

新增資料前清空資料• artisan db:seed 指令只會單純的執行 run 的內容,因此若指令一直下,假資料就會一直增加

• 使用 DB 物件在 Seeding 之前先清空資料表,假資料才不會一直長、一直長…

• 範例:DB::table(‘{資料表名稱}’)-­‐>truncate();

Page 27: Model & Seeding整合

讓資料多點隨機感• 設定 rand 函式產生 category_id 及

post_id,讓對應可以更隨機一些

• 用 Carbon 控制日期時間的產生,讓資料不會都在同一天寫入

• 範例:‘category_id’  =>  rand(1,  4);

‘created_at’  =>  \Carbon\Carbon::now()-­‐>addDays($index);

★ 參考:https://github.com/briannesbitt/Carbon

Page 28: Model & Seeding整合

讓假資料更真!• 配合 Faker 套件,讓產生出來的測試資料更像真的一樣 (有 Fu!)

• composer.json 內新增 faker 套件,再執行

composer update

• 寫 Seeder 檔時,引入 Faker 類別

• 若使用 generator 的話,會自動幫你寫好

★ 參考:https://github.com/fzaninotto/Faker

Page 30: Model & Seeding整合

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

• 流程提醒:

- working directory > staging area > commit

Page 31: Model & Seeding整合

階段檢查表• 確認有產生 3 個 Model 檔

• 確認有產生 3 個 Seeder 檔,並設定好

DatabaseSeeder

• 確認 DB 內已經有產生出來的測試資料

Page 32: Model & Seeding整合

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

Page 33: Model & Seeding整合

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

的 Model 及命名慣例,並用 Seeding 技巧產生資料庫內的假資料

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

的 ORM 來操作資料庫內的資料