构建应用程序时,无论是小型、中型还是大型。在应用程序中使用测试数据是不可避免且重要的。
因此,让我们从简单到高级,从两个不同的场景开始。
我。所有应用程序或大多数应用程序都应该有用户。有时,我们希望将用户分类/标记为管理员或常规用户。因此,让我们生成一个包含 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中文网其他相关文章!