¿Cuál es la diferencia entre Model Factory y una sembradora DB en Laravel?
Prefiero ver Sembradoras y Fábricas desde otra perspectiva.
Como lo mencionaron otros, las fábricas de modelos se utilizan con fines de prueba y para completar su base de datos con una gran cantidad de datos falsos. Esto podría usarse para pruebas unitarias y pruebas de rendimiento de su sistema.
Por otro lado, las clases Seeder se utilizan para insertar datos que son cruciales e importantes para que el sistema funcione. Algo así como el superadministrador, roles básicos/permisos de roles en el sistema, países, ciudades y otros datos que pueden no provenir de CRUD
Investigué para su pregunta y encontré algo simple como a continuación.
Tanto Factory como Seeder se utilizan para generar datos de prueba para la aplicación.
Factory: al usar fábricas, puede crear fácilmente datos de prueba para su aplicación laravel basada en Model. En fábrica estamos usando otra clase como Faker para generar datos falsos fácilmente.
En fábrica también podemos generar datos relacionados con la relación, mientras que en db seeder no podemos.
factory(App\User::class, 50)->create()->each(function ($user) { $user->posts()->save(factory(App\Post::class)->make()); });Otro ejemplo de fábrica:
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), ]; });Seeder: al usar seeder puede crear datos de prueba basados en el nombre de su tabla. Como abajo.
<?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'), ]); } }Puedes consultar aquí para más información:
https://laravel.com/docs/5.7/seeding#using-model-factories
https://laravel.com/docs/5.7/database-testing#writing-factories
El sembrador de bases de datos se utiliza para llenar tablas con datos.
Las fábricas de modelos son un lugar centralizado conveniente para definir cómo se deben completar sus modelos con datos falsos.
En la clase seeder, aprovecharía las fábricas modelo, y lo más probable es que las fábricas modelo usen otra biblioteca para generar datos falsos aleatorios, como fzaninotto/faker.