И 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(); } }