建置應用程式時,無論是小型、中型或大型。在應用程式中使用測試數據是不可避免且重要的。
因此,讓我們從簡單到高級,從兩個不同的場景開始。
我。所有應用程式或大多數應用程式都應該有用戶。有時,我們希望將使用者分類/標記為管理員或常規使用者。因此,讓我們產生一個包含 100 個使用者的簡單播種器,其表規格如下:
我們開始吧。
為了植入 users 表,當然,您需要 Laravel 為您建立預設的使用者遷移表。
因此,為了演示,您的表格遷移應如下所示:
public function up() { Schema::create('users', function (Blueprint $table) { $table->id(); $table->string('first_name'); $table->string('last_name'); $table->string('email'); $table->string('password'); $table->enum('user_type', ['user','admin'])->default('user'); $table->rememberToken(); $table->timestamps(); }); }
為我們的使用者表建立一個播種器類別。
php artisan make:seeder UserSeeder
因此,要為我們剛剛建立的播種器建立值,我們需要使用每個 Laravel 應用程式附帶的預設 Faker 套件。
為了一次產生 100 個用戶,我們先執行一個 for 迴圈並將假/偽資料傳遞到每一列,如下所示:
use Faker\Factory as Faker; public function run() { $faker = Faker::create(); for(i = 0; i <= 99; i++) { User::create([ 'first_name' => $faker->firstName(), 'last_name' => $faker->lastName(), 'email' => $faker->email(), 'password' => bcrypt('hello1234'), // we might want to set this to a value we can easily remember for testing sake 'user_type' => $faker->randomElement(['admin', 'user']) ]); } }
要將其播種到資料庫中,我們需要執行以下命令:
php artisan db:seed --class=UserSeeder
這將建立 100 個使用者並將其插入資料庫。
就這麼簡單。
現在,我們需要一個更進階的解決方案。
我們需要建立:
我們已經知道使用者表是什麼樣子,讓我們看看員工表和部門表是什麼樣子。
員工桌
Schema::create('staff', function (Blueprint $table) { $table->id(); $table->string('first_name'); $table->string('last_name'); $table->string('email'); $table->foreignId('department_id')->references('id')->on('departments'); $table->foreignId('user_id')->references('id')->on('users'); $table->timestamps(); });
部門表:
Schema::create('departments', function (Blueprint $table) { $table->id(); $table->string('name'); $table->timestamps(); });
因此我們需要執行遷移才能將這些表保留在我們的資料庫中。
現在,對於 UserSeeder 類,我們將實作前面所述的要點。
$now = now(); $count = 0; $departmentNames = ['Electronics', 'Home & Garden', 'Toys & Games', 'Health & Beauty', 'Automotive', 'Sports & Outdoors','Clothing & Accessories', 'Books', 'Music', 'Movies & TV', 'Grocery' ]; for ($j=0; $j <= 9; $j++){ Department::create([ 'name' => $departmentNames[$j], 'created_at' => $now, 'updated_at' => $now, ]); $count++; }
最後兩個要點需要一起實現
if ($count == 10) { // we need to make sure we have all 10 departments $departments = Department::pluck('id')->toArray(); for ($i=0; $i <= 99; $i++) { $user = User::create([ 'first_name' => $faker->firstName(), 'last_name' => $faker->lastName(), 'email' => $faker->email(), 'password' => bcrypt('hello1234'), 'user_type' => $faker->randomElement(['admin', 'user']), 'created_at' => $now, 'updated_at' => $now ]); Staff::create([ 'first_name' => $user->first_name, 'last_name' => $user->last_name, 'email' => $user->email, 'user_id' => $user->id, 'department_id' => $faker->randomElement($departments), // pick random departments from DB 'created_at' => $now, 'updated_at' => $now ]); } }
說明:
我們先創建了10個部門。
然後我們設定了一個計數器來檢查是否所有 10 個部門都已建立。
如果計數器條件為真,我們將建立 100 個使用者。
對於這 100 個使用者中的每一個,我們需要在另一個名為員工表的表中引用他們的詳細資料。
每個員工必須屬於一個用戶,也必須屬於一個部門,所以為此,我們需要取得先前建立的所有部門,並將它們隨機注入到department_id列中。
完整的 UserSeeder 實作
$now = now(); $count = 0; $departmentNames = ['Electronics', 'Home & Garden', 'Toys & Games', 'Health & Beauty', 'Automotive', 'Sports & Outdoors','Clothing & Accessories', 'Books', 'Music', 'Movies & TV', 'Grocery' ]; for ($j=0; $j <= 9; $j++){ Department::create([ 'name' => $departmentNames[$j], 'created_at' => $now, 'updated_at' => $now, ]); $count++; } $faker = Faker::create(); if ($count == 10) { $departments = Department::pluck('id')->toArray(); for ($i=0; $i <= 99; $i++) { $user = User::create([ 'first_name' => $faker->firstName(), 'last_name' => $faker->lastName(), 'email' => $faker->email(), 'password' => bcrypt('hello1234'), 'user_type' => $faker->randomElement(['admin', 'user']), 'created_at' => $now, 'updated_at' => $now ]); Staff::create([ 'first_name' => $user->first_name, 'last_name' => $user->last_name, 'email' => $user->email, 'user_id' => $user->id, 'department_id' => $faker->randomElement($departments), // pick random departments from DB 'created_at' => $now, 'updated_at' => $now ]); } }
然後運行:
php artisan make:seeder --class=UserSeeder
如果您有任何疑問,請隨時提出。快樂編碼!
以上是如何在 Laravel 中使用 Database Seeders 輕鬆產生數據的詳細內容。更多資訊請關注PHP中文網其他相關文章!