Laravel 可以用 seed 類輕松地為數(shù)據(jù)庫填充測(cè)試數(shù)據(jù)规脸。所有的 seed 類都存放在 database/seeds 目錄下铸题。你可以任意為 seed 類命名,但是應(yīng)該遵守類似 UsersTableSeeder 的命名規(guī)范党瓮。Laravel 默認(rèn)定義了一個(gè) DatabaseSeeder 類姜挺。可以在這個(gè)類中使用 call 方法來運(yùn)行其它的 seed 類來控制數(shù)據(jù)填充的順序锰扶。
注意 laravel常用函數(shù)文件 :
- vendor/laravel/framework/src/Illuminate/Foundation/helpers.php
- vendor/laravel/framework/src/Illuminate/Support/helpers.php
命令
在laravel項(xiàng)目根目錄下献酗,執(zhí)行如下:
php artisan
查看所有命令
php artisan help make:seeder
如:查看 Seeder 命令參數(shù)幫助
1.創(chuàng)建Seeders
可以通過運(yùn)行 make:seeder
[Artisan 命令]來生成一個(gè) Seeder,如
php artisan make:seeder UsersTableSeeder
生成之后的文件存放在 database / seeds
目錄下坷牛。
2.factories / ModelFactory模型工廠
Faker是一個(gè)為您生成虛假數(shù)據(jù)的PHP庫罕偎,F(xiàn)aker 官網(wǎng):https://github.com/fzaninotto/Faker#populating-entities-using-an-orm-or-an-odm
使用 database / factories / ModelFactory
目錄下的 ModelFactory
文件模型工廠 文件模型工廠生成隨機(jī)數(shù)據(jù),如:
// 設(shè)置添加到數(shù)據(jù)庫的隨機(jī)數(shù)據(jù)
$factory->define(App\Users::class, function (Faker\Generator $faker) {
return [
'title' => $faker->sentence(2),
'content' => $faker->paragraph(10),
'user_id' => floor(mt_rand())
];
});
其中 App\Users::class
的 Users 是模型京闰。
3.調(diào)用模型工廠
在步驟1生成的 seeder 文件中颜及,進(jìn)行調(diào)用步驟2編寫好模型工廠甩苛,如:
public function run()
{
factory(App\Users::class,50)->create();
}
4.調(diào)用 Seed
在 database / seeds
下的 DatabaseSeeder
類中調(diào)用編寫好的 UsersTableSeeder
,如:
public function run()
{
$this->call(UersTableSeeder::class);
}
5.執(zhí)行添加數(shù)據(jù)
在項(xiàng)目根目錄下,打開 cmd 俏站,執(zhí)行
php artisan db:seed
也可以用 --class 選項(xiàng)來單獨(dú)運(yùn)行一個(gè)特定的 seeder 類:
php artisan db:seed --class=UsersTableSeeder
不知道命令讯蒲,可以查看本文開頭的命令,執(zhí)行一下肄扎,看到 Seeding: PostsTableSeeder 墨林,就添加數(shù)據(jù)成功了。
注意:
描述一個(gè)問題:
1.我先調(diào)用:
php artisan make:seeder AdminUserTableSeeder
2.生成一個(gè) 'AdminUserTableSeeder' 類犯祠,但是發(fā)現(xiàn)旭等,應(yīng)該命名為'AdminUsersTableSeeder',用戶應(yīng)該為復(fù)數(shù)衡载。然后我就手動(dòng)修改了文件&文件內(nèi)部的類名搔耕。
3.執(zhí)行:
php artisan db:seed
直接報(bào)錯(cuò):
[ReflectionException] Class AdminUsersTableSeeder does not exist
解決方法:
composer dump-autoload
或者,清除緩存 php artisan cache:clear / php artisan config:clear
隨即想到痰娱,php artisan 命名弃榨,可能生成了一些 composer 相關(guān)的緩存,去 'vendor/composer/' 發(fā)現(xiàn)了幾個(gè)autoload_xx.php文件梨睁,這里就是 composer 自動(dòng)加載的文件列表鲸睛!也同 'composer.json' 中的 'autoload' 的配置,有很大關(guān)聯(lián)