by Devin Yang

建立於: 7年前 ( 更新: 7年前 )

本文將一步一步介紹相關的指令用例:
Model=>Factory=>Seeder=>DatabaseSeeder
一步一腳印,讓我們就從Model開始檢視所有流程到DatabaseSeeder。

您閱讀本文前,您應該要了解Laravel中的 make:migration相關用途

一、 Model (模型)
透過簡單的ActiveRecord輕鬆的對資料庫進行修改,簡單說,讓我們以物件的方式進行資料的修改。
您可以由這裡看到Active Record說明,這裡引用RailsGuids的文章給大家參考。

那在Laravel中如何建Model呢? 記得請用單數,一個物件Model Object代表是單數,
例如$obj->title而不是$objs->title。
php artisan make:model Content

上方指令,建立了一個名為Content的model,這個Model預設對映到資料表中的 contents 資料表,
因為資料表內會有多筆資料,所以資料表是 contents 複數,非常符合邏輯,

當然,我們也可以自訂Mode所對映的Table名稱,例如,我在Content.php這個Model中加入如下:
protected $table='content';

為何這樣做,絕對不是因為我任性,也不是這樣做比較屌或是裝逼,
是因為這是舊程式轉Laravel,這個 content table 已存在很久,被我列為古蹟了,動不得,
無法更名為contents。

所以Laravel的Model提供高度的自由,雖然有預設的規則,但是我們也可以依自己的狀況及需求調整
諸如table名稱,或是PK欄位(id)等,但是,如果您是新的專案,請勿任性自訂Table的名稱或PK哦!
殊殊用法例外,這裡不在多做說明。

二、Factory(工廠)
在Lravel的5.5後,可以對各別的Model,建立各別的工廠。
先來看看指令:
php artisan make:factory StudentSahreFactory

在上方的指令中,即可建立一個 StudentShareFactory.php 工廠,工廠通常用來建假資料。
上方指令,在這間工廠( StudentShareFactory )中,我定義(define)了一個 App\Student Model
並透過 Faker 產生假資料,存入欄位中(下圖)。

在下方的Sample中可能較原來Laravel預設的複雜一點,但是基本執行一次就會建立一筆假資料到students的資料表中 ,
這裡我有一個有趣的使用方式,我的 c_index 欄,需要依序新增,
也就是我建立一百筆資料時,c_index欄,要依序,由1加到100,所以我建了一個自訂的Class處理這件事情。
factory

有了Facetory後,我們可以在透過Tinker( php artisan tinker )提供的指令,輕鬆建立單筆或多筆的假資料了。
下圖中(Tinker的互動模式),透過 factory ,我建立了 10 筆隨機的假資料,到students資料表。
tinker

三、Seeder(播種者)
Seeder的用途,讓我們可以不透過手動執行 tinker 來建立假資料。
如何建seeder,我想,大家或許猜到了,當然就是 make:seeder (產生:播種者)。
我想讀到這裡,您應該已經會 make:model make:factory 了,
並且使用 php artisan tinker 建立假資料。
php artisan make:seeder StudentShareSeeder

上方的指令中,我建立了一個 StudentSahreSeeder.php ,產生後,用我們的編輯器找到該檔,
在下圖run()的 methods 內,再補上剛我在Tinker中所用的建假資料的工廠指令,
例如這裡,也就是當這個run()被執行時,就可以一口氣建立300筆假資料。
seeder
我們可以用db:seed --class=指令,來執行指定的Seeder,
例如這裡的StudentShareSeeder,即可產生300筆的假資料,
一個新的網站沒假資料怎麼套版呢,您說是吧。
php artisan db:seed --class=StudentShareSeeder

未指定--class時, php artisan db:seed ,預設他會呼叫DatabaseSeeder.php
註: seeder不止可以拿來產生假資料,也可以拿來產生一個Project最初所所需要的真資料。

四、DatabaseSeeder
要能快速的建立一個可運作的開發環境,當然不需要手動下那麼多指令,應該就是用 db:seed 即可。
當不指定--class時,預設就會採用 DatabaseSeeder
在下圖的DatabaseSeeder.php中,可以看見,我呼叫了一堆的Seeder。
DatabaseSeeder
所以一個可被重覆使用的Project,我會執行migration後,再執行db:seed
來產生後台所需的基本資料。

舉例: 我套版的後台固定的新增修刪功能及模組化的表單,因此不需搞個網站就重寫一次新增修刪,
當我要套版一個新的網站時,我只需git clone後台的Project下來。
再執行composer install,調整.env(網站域名,OAuth主機指定)及建資料庫等動作,然後再執行php artisan migratephp artisan db:seed,搞定,我就能登入至後台設定所需的表單樣式等功能,及產生假資料了,
然後依美工給我的靜態頁進行blade前台套版了,所以套版後台,可被重覆使用,
透過db:seed讓我可以快速的建立起整個後台運作基本環境。
php artisan db:seed

在上方指令執行後,他會跑DatabaseSeeder,瞬間產生定義好,我開發時所需要的測試資料囉,
所以有了db:seed,拿來建立Project最初所需要的共用資料,不論自用還是他用都非常方便的。

在上圖的例子中,我的OwBaseSeeder,跑的可不是factory,而是LaravelQuery Builder
來看看我這裡的OwBaseSeeder.php怎麼跑Insert基本的資料。
Query Builder

五、help(幫助)
再讓我們回到Model, make:model 指令相當多好用的參數,這裡以Laravel 5.5為例。
-a或是-m等。
我們對於Laravel的artisan命令有不了解,想了解更多時,都可以使用 help 這個 keyword 取得說明。
php artisan help make:model
help command
例如,在建Model的同時,順便一起產生其他需要檔案,例如: Factory、Controller及migration檔案等。
底下,示意圖:
隨便測試的指令
 

Tags: laravel

Devin Yang

文章內容無法一一說明,如果您有什麼不了解處,歡迎提問哦:)

No Comment

Post your comment

需要登入才可留言!

類似的文章


laravel

Laravel 5.6有那些新變更

Laravel 5.6計劃於2018年2月釋出,有那些變更呢?我們來看看吧。(Argon2i Password Hashing Algorithm) ​​​​​​​Argon2 提供以下三種版本: 1. 在Laravel 5.6將支援 Argon2i密碼雜湊算法。 (Argon2i Password Hashing Algorithm) 2. Argon2d最大限度地抵抗GPU的破解攻擊。 3. Argon2i經過優化,可以抵抗旁路攻擊(side-channel attack)。 三、Argon2id是一個混合版本。 它遵循Argon2i方法進行第一遍遍歷,然後使用Argon2d方法進行後續遍歷。 看不懂沒關係,反正我也看不懂,重點是,反正比較安全是可以確定的。這是開放密碼雜溙競賽(PHC)在2015年7月20日

docker, tinkerwell, tinker, laravel

Tinkerwell與docker環境運用

其實我最近不用Tinkerwell了,因為老是要我花錢更新。要測試直接ssh 主機不就搞定啦不是?

docker, d-laravel, docker-compose, laravel

docker-compose載入多個設定檔

我們會用docker --network建立多個container互連,但是如果四個container時, 是不是就要下四次docker run不同container的指令,殺了我吧, 本文介紹透過docker-compose這個yaml檔定義一次搞定多個container的建立。 了解如何用dokcer-compose -f 參數載入多個設定檔。