И Factory, и Seeder используются для создания данных тестирования для вашего приложения. Но есть некоторые различия:
Factory
Используя фабрики, вы можете легко создавать тестовые данные для вашего приложения Laravel на основе вашей модели. В Factory мы используем другие классы или библиотеки, которые позволяют fzaninotto/faker легко генерировать поддельные данные.
В Factory мы также можем генерировать данные, связанные с отношениями, тогда как в DB Seeder мы не можем этого сделать.
// generating data based on model
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;
// generating data using 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),
];
});
Seeder
Laravel включает возможность заполнять вашу базу данных данными, используя начальные классы. Все начальные классы хранятся в database/seeders каталоге. По умолчанию DatabaseSeeder для вас определен класс. Из этого класса вы можете использовать call метод для запуска других начальных классов, что позволяет вам контролировать порядок заполнения.
use Illuminate\Support\Str;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use App\Models\User;
class DatabaseSeeder extends Seeder
{
public function run(){
User::factory()
->count(50)
->hasPosts(1)
->create();
}
}