數據填充
目錄下。你可以隨意為填充類別命名, 但更建議您遵守類似 UsersTableSeeder 的命名規範。通常, Laravel 預設定義了一個
DatabaseSeeder方法來運行其它的 seed 類別來控制資料填充的順序。
執行 一個 seeder 類別只包含一個預設方法: {tip} 批次賦值保護 會在資料填充時自動停用。 如下所示,在預設的 #{tip} 你在 當然,手動為每個模型填充指定屬性很麻煩。作為替代方案,你可以使用 model 工廠 輕鬆地產生大量資料庫資料。首先, 閱讀 model 工廠文件 來學習如何定義工廠文件,一旦定義好了你的工廠文件,然後就可以使用 例如,建立50 個使用者並為每個使用者建立關聯: 在 完成seeder 類別的寫完之後,你可能需要使用 現在你可以使用Artisan 指令 你也可以用寫 Seeders
make:seeder
這個 Artisan 指令 來產生 Seeder。框架產生的 seeders 都會被放置在 database/seeds
目錄下php artisan make:seeder UsersTableSeeder
run
。這個方法會在執行 db:seed
這個 Artisan 指令 時被呼叫。在 run
方法裡你可以依照需求在資料庫中插入資料。你也可以用 查詢建構器 或 Eloquent 模型工廠 來手動插入資料。 DatabaseSeeder
類別中的run
方法中新增一條資料插入語句: <?php
use Illuminate\Support\Str;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class DatabaseSeeder extends Seeder{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
DB::table('users')->insert([
'name' => Str::random(10),
'email' => Str::random(10).'@gmail.com',
'password' => bcrypt('secret'),
]);
}
}
run
的方法簽章中可以用型別來約束你需要的依賴。它們會被 Laravel 服務容器 自動解決。 使用模型工廠
factory
這個輔助函數來向資料庫插入資料。 /**
* 运行数据库填充。
*
* @return void
*/
public function run(){
factory(App\User::class, 50)->create()->each(function ($u) {
$u->posts()->save(factory(App\Post::class)->make());
});
}
呼叫其它Seeders
DatabaseSeeder
類別中,你可以使用call
方法來執行其它的seed 類別。使用 call
方法可以將資料填入拆分成多個文件,這樣就不會讓單一 seeder 變得非常大。只要簡單傳遞要執行的seeder 類別名稱:/**
* 运行数据库 seeds。
*
* @return void
*/
public function run(){
$this->call([
UsersTableSeeder::class,
PostsTableSeeder::class,
CommentsTableSeeder::class,
]);
}
#執行Seeders
dump-autoload
指令重新產生Composer 的自動載入器:composer dump-autoload
db:seed
來填入資料庫了。預設情況下, db:seed
指令將執行 DatabaseSeeder
類,這個類別可以用來呼叫其它 Seed 類別。不過,你也可以使用--class
選項來指定一個特定的seeder 類別:php artisan db:seed
php artisan db:seed --class=UsersTableSeeder
migrate:refresh
這個指令來填入資料庫,該命令會回滾並重新運行所有遷移。這個指令可以用來重建資料庫:php artisan migrate:refresh --seed