Laravel 中的 Model Factory 和 DB seeder 有什么区别?
What is the difference between Model Factory and a DB seeder in Laravel?
Laravel 中的 Model Factory 和 DB seeder 有什么区别?
数据库播种器用于用数据填充表。
模型工厂是一个方便的集中位置,用于定义您的模型应如何填充虚假数据。
在 seeder class 中,您将利用模型工厂,而模型工厂很可能会使用另一个库来生成随机假数据,例如 fzaninotto/faker.
我已经针对您的问题进行了研究,发现了如下简单的内容。
Factory & Seeder 都用于为应用程序生成测试数据。
工厂:
通过使用工厂,您可以轻松地为基于模型的 laravel 应用程序创建测试数据。在 factory 中,我们正在使用另一个 class,例如 Faker 来轻松生成假数据。
在 factory 中我们也可以生成与关系相关的数据,而在 db seeder 中我们不能。
factory(App\User::class, 50)->create()->each(function ($user) {
$user->posts()->save(factory(App\Post::class)->make());
});
工厂的另一个例子:
use Illuminate\Support\Str;
use Faker\Generator as Faker;
$factory->define(App\User::class, function (Faker $faker) {
return [
'name' => $faker->name,
'email' => $faker->unique()->safeEmail,
'email_verified_at' => now(),
'password' => 'y$TKh8H1.PfQx37YgCzwiKb.KjNyWgaHb9cbcoQgdIVFlYg7B77UdFm', // secret
'remember_token' => Str::random(10),
];
});
播种者:
通过使用 seeder,您可以根据您的 table 名称创建测试数据。如下所示。
<?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'),
]);
}
}
您可以在这里查看更多信息:
https://laravel.com/docs/5.7/seeding#using-model-factories
https://laravel.com/docs/5.7/database-testing#writing-factories
我更喜欢从另一个角度看播种机和工厂。
正如其他人所提到的,模型工厂用于测试目的并使用大量虚假数据填充您的数据库。这可用于系统的单元测试和性能测试。
另一方面,Seeder 类 用于插入对系统运行至关重要的数据。像超级管理员、系统中的基本 Roles/Role 权限、国家、城市和其他可能不是来自 CRUD 的数据
Laravel 中的 Model Factory 和 DB seeder 有什么区别?
数据库播种器用于用数据填充表。
模型工厂是一个方便的集中位置,用于定义您的模型应如何填充虚假数据。
在 seeder class 中,您将利用模型工厂,而模型工厂很可能会使用另一个库来生成随机假数据,例如 fzaninotto/faker.
我已经针对您的问题进行了研究,发现了如下简单的内容。
Factory & Seeder 都用于为应用程序生成测试数据。
工厂: 通过使用工厂,您可以轻松地为基于模型的 laravel 应用程序创建测试数据。在 factory 中,我们正在使用另一个 class,例如 Faker 来轻松生成假数据。
在 factory 中我们也可以生成与关系相关的数据,而在 db seeder 中我们不能。
factory(App\User::class, 50)->create()->each(function ($user) {
$user->posts()->save(factory(App\Post::class)->make());
});
工厂的另一个例子:
use Illuminate\Support\Str;
use Faker\Generator as Faker;
$factory->define(App\User::class, function (Faker $faker) {
return [
'name' => $faker->name,
'email' => $faker->unique()->safeEmail,
'email_verified_at' => now(),
'password' => 'y$TKh8H1.PfQx37YgCzwiKb.KjNyWgaHb9cbcoQgdIVFlYg7B77UdFm', // secret
'remember_token' => Str::random(10),
];
});
播种者: 通过使用 seeder,您可以根据您的 table 名称创建测试数据。如下所示。
<?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'),
]);
}
}
您可以在这里查看更多信息:
https://laravel.com/docs/5.7/seeding#using-model-factories
https://laravel.com/docs/5.7/database-testing#writing-factories
我更喜欢从另一个角度看播种机和工厂。
正如其他人所提到的,模型工厂用于测试目的并使用大量虚假数据填充您的数据库。这可用于系统的单元测试和性能测试。
另一方面,Seeder 类 用于插入对系统运行至关重要的数据。像超级管理员、系统中的基本 Roles/Role 权限、国家、城市和其他可能不是来自 CRUD 的数据