建立於: 7年前 ( 更新: 7年前 )
本文將一步一步介紹相關的指令用例:
Model=>Factory=>Seeder=>DatabaseSeeder
一步一腳印,讓我們就從Model開始檢視所有流程到DatabaseSeeder。
您閱讀本文前,您應該要了解Laravel中的 make:migration相關用途 。
一、 Model (模型)
透過簡單的ActiveRecord輕鬆的對資料庫進行修改,簡單說,讓我們以物件的方式進行資料的修改。
您可以由這裡看到Active Record說明,這裡引用RailsGuids的文章給大家參考。
那在Laravel中如何建Model呢? 記得請用單數,一個物件Model Object代表是單數,
例如$obj->title而不是$objs->title。
因為資料表內會有多筆資料,所以資料表是 contents 複數,非常符合邏輯,
當然,我們也可以自訂Mode所對映的Table名稱,例如,我在Content.php這個Model中加入如下:
是因為這是舊程式轉Laravel,這個 content table 已存在很久,被我列為古蹟了,動不得,
無法更名為contents。
所以Laravel的Model提供高度的自由,雖然有預設的規則,但是我們也可以依自己的狀況及需求調整,
諸如table名稱,或是PK欄位(id)等,但是,如果您是新的專案,請勿任性自訂Table的名稱或PK哦!
殊殊用法例外,這裡不在多做說明。
二、Factory(工廠)
在Lravel的5.5後,可以對各別的Model,建立各別的工廠。
先來看看指令:
上方指令,在這間工廠( StudentShareFactory )中,我定義(define)了一個 App\Student 的 Model ,
並透過 Faker 產生假資料,存入欄位中(下圖)。
在下方的Sample中可能較原來Laravel預設的複雜一點,但是基本執行一次就會建立一筆假資料到students的資料表中 ,
這裡我有一個有趣的使用方式,我的 c_index 欄,需要依序新增,
也就是我建立一百筆資料時,c_index欄,要依序,由1加到100,所以我建了一個自訂的Class處理這件事情。

有了Facetory後,我們可以在透過Tinker(
下圖中(Tinker的互動模式),透過 factory ,我建立了 10 筆隨機的假資料,到students資料表。

三、Seeder(播種者)
Seeder的用途,讓我們可以不透過手動執行 tinker 來建立假資料。
如何建seeder,我想,大家或許猜到了,當然就是
我想讀到這裡,您應該已經會
並且使用
在下圖run()的 methods 內,再補上剛我在Tinker中所用的建假資料的工廠指令,
例如這裡,也就是當這個run()被執行時,就可以一口氣建立300筆假資料。

我們可以用
例如這裡的StudentShareSeeder,即可產生300筆的假資料,
一個新的網站沒假資料怎麼套版呢,您說是吧。
註: seeder不止可以拿來產生假資料,也可以拿來產生一個Project最初所所需要的真資料。
四、DatabaseSeeder
要能快速的建立一個可運作的開發環境,當然不需要手動下那麼多指令,應該就是用
當不指定--class時,預設就會採用 DatabaseSeeder 。
在下圖的DatabaseSeeder.php中,可以看見,我呼叫了一堆的Seeder。

所以一個可被重覆使用的Project,我會執行migration後,再執行
來產生後台所需的基本資料。
舉例: 我套版的後台固定的新增修刪功能及模組化的表單,因此不需搞個網站就重寫一次新增修刪,
當我要套版一個新的網站時,我只需git clone後台的Project下來。
再執行
然後依美工給我的靜態頁進行blade前台套版了,所以套版後台,可被重覆使用,
透過
所以有了
在上圖的例子中,我的OwBaseSeeder,他跑的可不是factory,而是Laravel的Query Builder。
來看看我這裡的OwBaseSeeder.php怎麼跑Insert基本的資料。

五、help(幫助)
再讓我們回到Model, make:model 指令相當多好用的參數,這裡以Laravel 5.5為例。
-a或是-m等。
我們對於Laravel的artisan命令有不了解,想了解更多時,都可以使用 help 這個 keyword 取得說明。

例如,在建Model的同時,順便一起產生其他需要檔案,例如: Factory、Controller及migration檔案等。
底下,示意圖:

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處理這件事情。

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

三、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筆假資料。

我們可以用
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。

所以一個可被重覆使用的Project,我會執行migration後,再執行
db:seed
,來產生後台所需的基本資料。
舉例: 我套版的後台固定的新增修刪功能及模組化的表單,因此不需搞個網站就重寫一次新增修刪,
當我要套版一個新的網站時,我只需git clone後台的Project下來。
再執行
composer install
,調整.env(網站域名,OAuth主機指定)及建資料庫等動作,然後再執行php artisan migrate
及php artisan db:seed
,搞定,我就能登入至後台設定所需的表單樣式等功能,及產生假資料了,然後依美工給我的靜態頁進行blade前台套版了,所以套版後台,可被重覆使用,
透過
db:seed
讓我可以快速的建立起整個後台運作基本環境。
php artisan db:seed
在上方指令執行後,他會跑DatabaseSeeder,瞬間產生定義好,我開發時所需要的測試資料囉,所以有了
db:seed
,拿來建立Project最初所需要的共用資料,不論自用還是他用都非常方便的。在上圖的例子中,我的OwBaseSeeder,他跑的可不是factory,而是Laravel的Query Builder。
來看看我這裡的OwBaseSeeder.php怎麼跑Insert基本的資料。

五、help(幫助)
再讓我們回到Model, make:model 指令相當多好用的參數,這裡以Laravel 5.5為例。
-a或是-m等。
我們對於Laravel的artisan命令有不了解,想了解更多時,都可以使用 help 這個 keyword 取得說明。
php artisan help make:model

例如,在建Model的同時,順便一起產生其他需要檔案,例如: Factory、Controller及migration檔案等。
底下,示意圖:

No Comment
Post your comment