Migrations and Seeders on Laravel 9
I really like using migrations and seeders, as it has great advantages over creating it by hand and also makes it compatible with the various supported DBMSs. Also facilitates the creation of fake data to try application. Good for testing as it is code.
See this, being able to export the current bank with all the records:
https://github.com/ribafs/iseed https://github.com/ribafs/DbExporter https://github.com/ribafs/Replibyte-seed
Create or access your application
cd application
Create a migration
php artisan make:migration create_customers_table
Edit and update
database/migrations/2022_10_12_100303_create_customers_table.php
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateCustomersTable extends Migration
{
public function up()
{
Schema::create('customers', function (Blueprint $table) {
$table->increments('id');
$table->string('name')->notNullable();
$table->text('email')->nullable();
$table->timestamp('created_at')->default(DB::raw('CURRENT_TIMESTAMP'));
$table->timestamp('updated_at')->default(DB::raw('CURRENT_TIMESTAMP'));
});
}
public function down()
{
Schema::drop('customers');
}
}
Create table
php artisan migrate
$ Create seeder
php artisan make:seeder CustomersSeeder
Change database/seeders/CustomersSeeder.php to
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Str;
class CustomersSeeder extends Seeder
{
public function run()
{
for($count=0;$count<10;$count++){
DB::table('customers')->insert([
'name' => Str::random(15),
'email' => Str::random(10).'@gmail.com',
'updated_at' => date("Y-m-d H:i:s"),
'created_at' => date("Y-m-d H:i:s")
]);
}
}
}
DatabaseSeeder
Edit database/seeds/DatabaseSeeder.php
class DatabaseSeeder extends Seeder
{
public function run()
{
$this->call(CustomersSeeder::class);
}
}
Populate table
php artisan db:seed --class=CustomersSeeder
Create 10 registers
Or:
php artisan migrate:fresh --seed
Try
php artisan serve
http://127.0.0.1:8000/customers/
Levei este pequeno tutorial para o grupo PHP Brasil e acabei fazendo um rápida pesquisa pela diferença entre factory e seeder.
Factories e Seeders
Tradução livre de posts no Stackoverflow e no tutorial https://devnote.in/difference-between-factory-and-seeders-in-laravel/
Por que usamos factory e seeders em Laravel?
factory e seeders são usados para gerar dados falsos ou de teste. Quando você usa Factory e Seeders, não precisa adicionar dados manualmente ao seu banco de dados. seeders
O que são seeders?
seeder é uma classe. O Seeder é usado para criar dados falsos ou de teste usando o nome da tabela.
O que é factory?
A factory é uma função auxiliar. A factory é usada para criar dados falsos ou de teste usando o modelo. Uma factory também é um objeto global. A factory usa uma classe Faker para gerar dados fictícios. A factory também pode gerar dados de relacionamento com o modelo que o seeder não pode fazer.
Prefiro ver seeders e factorys de outra perspectiva.
Como mencionado por outros, as factorys de modelos são usadas para fins de teste e preenchimento de seu banco de dados com uma enorme quantidade de dados falsos. Isso pode ser usado para teste de unidade e teste de desempenho do seu sistema.
Por outro lado, as Classes seederas são usadas para inserir dados que são cruciais e importantes para o sistema operar. Algo como o superadministrador, funções básicas/permissões de funções no sistema, países, cidades e outros dados que podem não vir de CRUDs
Eu pesquisei para sua pergunta e encontrei algo simples como abaixo.
factory e seeder são usados para gerar dados de teste para o aplicativo.
Factory: Ao usar as factorys, você pode criar facilmente dados de teste para seu aplicativo laravel com base em Model. Na factory estamos usando outra classe como Faker para gerar dados falsos facilmente.
Na factory também podemos gerar dados relacionados ao relacionamento enquanto no db seeder não podemos.
factory(App\User::class, 50)->create()->each(function ($user) {
$user->posts()->save(factory(App\Post::class)->make());
});
seeder: Ao usar o seeder, você pode criar dados de teste com base no nome da sua tabela. Como abaixo.
Você pode conferir aqui para mais informações:
https://laravel.com/docs/9.x/seeding#using-model-factories
https://laravel.com/docs/9.x/database-testing#writing-factories
seeder de banco de dados é usado para preencher tabelas com dados.
As factorys de modelos são um local centralizado conveniente para definir como seus modelos devem ser preenchidos com dados falsos.
Na classe seeder, você aproveitaria as factorys de modelos, e as factorys de modelos provavelmente usarão outra biblioteca para gerar dados falsos aleatórios, como phpfaker/faker.