模型工厂和Laravel中的DB播种机有什么区别?

时间:2017-05-03 12:23:20

标签: php database laravel laravel-5 laravel-seeding

Laravel中Model Factory和DB播种机有什么区别?

3 个答案:

答案 0 :(得分:0)

我已经研究了您的问题,并发现了以下类似的简单内容。

Factory&Seeder都用于生成应用程序的测试数据。


工厂: 通过使用工厂,您可以轻松地基于Model为laravel应用程序创建测试数据。在工厂中,我们正在使用 Faker 之类的另一个类来轻松生成虚假数据。

在工厂中,我们还可以生成与关系有关的数据,而在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' => '$2y$10$TKh8H1.PfQx37YgCzwiKb.KjNyWgaHb9cbcoQgdIVFlYg7B77UdFm', // secret
        'remember_token' => Str::random(10),
    ];
});

种子: 通过使用播种器,您可以基于表名创建测试数据。如下所示。

<?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

答案 1 :(得分:0)

我更愿意从另一个角度来看播种者和工厂。

正如其他人所提到的,模型工厂用于测试目的,并用大量假数据填充数据库。这可以用于系统的单元测试和性能测试。

另一方面,Seeder类用于插入对系统进行操作至关重要的数据。诸如超级管理员,系统中的基本角色/角色权限,国家/地区以及其他可能不是来自CRUD的数据

答案 2 :(得分:-2)

数据库播种器用于使用数据填充表格。

模型工厂是一个方便的集中位置,用于定义如何使用虚假数据填充模型。

在seeder类中,您将利用模型工厂,而模型工厂很可能会使用另一个库来生成随机假数据,例如fzaninotto/faker.