W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
Laravel包含了一個(gè)簡單方法來填充——使用填充類和測試數(shù)據(jù)。所有的填充類都位于database/seeds
目錄。填充類的類名完全由你自定義,但最好還是遵循一定的規(guī)則,比如可讀性,例如UserTableSeeder
等等。安裝完Laravel后,會(huì)默認(rèn)提供一個(gè)DatabaseSeeder
類。從這個(gè)類中,你可以使用call
方法來運(yùn)行其他填充類,從而允許你控制填充順序。
要生成一個(gè)填充器,可以通過Artisan命令make:seeder
。所有框架生成的填充器都位于database/seeders
目錄:
php artisan make:seeder UserTableSeeder
一個(gè)填充器類默認(rèn)只包含一個(gè)方法:run
。當(dāng)Artisan命令db:seed
運(yùn)行時(shí)該方法被調(diào)用。在run
方法中,可以插入任何你想插入數(shù)據(jù)庫的數(shù)據(jù),你可以使用查詢構(gòu)建器手動(dòng)插入數(shù)據(jù),也可以使用Eloquent模型工廠。
舉個(gè)例子,讓我們修改Laravel安裝時(shí)自帶的DatabaseSeeder
類,添加一個(gè)數(shù)據(jù)庫插入語句到run
方法:
<?php
use DB;
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
class DatabaseSeeder extends Seeder{
/**
* 運(yùn)行數(shù)據(jù)庫填充
*
* @return void
*/
public function run()
{
DB::table('users')->insert([
'name' => str_random(10),
'email' => str_random(10).'@gmail.com',
'password' => bcrypt('secret'),
]);
}
}
當(dāng)然,手動(dòng)指定每一個(gè)模型填充的屬性是很笨重累贅的,取而代之的,我們可以使用模型工廠來方便的生成大量的數(shù)據(jù)庫記錄。首先,查看模型工廠文檔來學(xué)習(xí)如何定義工廠,定義工廠后,可以使用幫助函數(shù)factory
來插入記錄到數(shù)據(jù)庫。
舉個(gè)例子,讓我們創(chuàng)建50個(gè)用戶并添加關(guān)聯(lián)關(guān)系到每個(gè)用戶:
/**
* 運(yùn)行數(shù)據(jù)庫填充
*
* @return void
*/
public function run(){
factory('App\User', 50)->create()->each(function($u) {
$u->posts()->save(factory('App\Post')->make());
});
}
在DatabaseSeeder
類中,你可以使用call
方法執(zhí)行額外的填充類,使用call
方法允許你將數(shù)據(jù)庫填充分解成多個(gè)文件,這樣單個(gè)填充器類就不會(huì)變得無比巨大,只需簡單將你想要運(yùn)行的填充器類名傳遞過去即可:
/**
* 運(yùn)行數(shù)據(jù)庫填充
*
* @return void
*/
public function run(){
Model::unguard();
$this->call(UserTableSeeder::class);
$this->call(PostsTableSeeder::class);
$this->call(CommentsTableSeeder::class);
}
編寫好填充器類之后,可以使用Artisan命令db:seed
來填充數(shù)據(jù)庫。默認(rèn)情況下,db:seed
命令運(yùn)行可以用來運(yùn)行其它填充器類的DatabaseSeeder
類,但是,你也可以使用--class
?選項(xiàng)來指定你想要運(yùn)行的獨(dú)立的填充器類:
php artisan db:seed
php artisan db:seed --class=UserTableSeeder
你還可以使用migrate:refresh
命令來填充數(shù)據(jù)庫,該命令還可以回滾并重新運(yùn)行遷移,這在需要完全重建數(shù)據(jù)庫時(shí)很有用:
php artisan migrate:refresh --seed
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: