Laravel 8 - Factory and Seeders - 何千ものダミーデータを即座に生成する


セットアップ : laravel アプリを作成し、データベースに接続しますcomposer create-project laravel/laravel laravel_api
.env を開いてデータベースを構成する

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_api
DB_USERNAME=root
DB_PASSWORD=


データベースにデータベース スキーマ laravel_api を作成します.
以下を使用してテーブルを生成します.php artisan migrate
アプリを開き、フォルダーに移動します.app/database/factories で、laravel がテーブル ユーザーを使用してサンプル ファクトリーを既に作成していることがわかります.

将来ダミーユーザーを使用できるように、いくつかのマイナーな編集を行いましょう.パスワードを次のように変更しましょう.

 public function definition()
    {
        return [
            'name' => $this->faker->name(),
            'email' => $this->faker->unique()->safeEmail(),
            'email_verified_at' => now(),
            'password' => bcrypt('password'), // password
            'remember_token' => Str::random(10),
        ];
    }


では、まずはダミーデータを10サンプル作成してみましょう!

ターミナルに移動し、php artisan tinker を使用します

次のように入力して入力します.

\App\Models\User::factory()->count(10)->create();


Hurray! Just like that we instantaneously created 10 dummy data that we can use in our app, check the database and you will there are 10 rows added in there!



数千を生成するには、次のように 10 を任意の量に置き換えます.

\App\Models\User::factory()->count(10000)->create();

You now have 10000 users! 味を味わったので、自分で作ってみましょう!

最初に独自のモデル、移行、ファクトリ、およびシーダーを作成しましょうphp artisan make:model Todo -mfs
app/database/migrations に移動し、「...create_todos_table」を開きます

移行のユーザーの外部キーである列 string、text、completed および created_by を追加しましょう.

Schema::create('todos', function (Blueprint $table) {
            $table->id();
            $table->string('title');
            $table->text('body');
            $table->boolean('completed')->default(false);
            $table->unsignedBigInteger('created_by');

            $table->foreign('created_by')->references('id')->on('users')->onDelete('cascade');
            $table->timestamps();
        });

php artisan migrate を実行して、データベースにテーブルを生成しましょう

次に、app/database/factories で TodoFactory を開いて、これを貼り付けましょう.

public function definition()
    {
        return [
            'title' => $this->faker->sentence,
            'body' => $this->faker->paragraph,
            'completed' => rand(0,1),
            'created_by' => rand(1,10),
        ];
    }


これが Todo テーブルのコンテンツのルールになります

app/database/factories/seeders に移動して TodoSeeder を開き、これを内部に貼り付けて 3000 の todo データを生成します.

namespace Database\Seeders;

use App\Models\Todo;
use Illuminate\Database\Seeder;

class TodoSeeder extends Seeder
{
    public function run()
    {
        Todo::factory(3000)->create();
    }
}


シーダーを実行するには、最初に同じフォルダー内の DatabaseSeeder.php 内に貼り付けましょう.

$this->call(TodoSeeder::class);


ターミナルに移動し、その特定のシーダーを実行します.php artisan db:seed --class=TodoSeeder

Hurray! Now you have added 3000 rows of Todos in your database table instantly!



内部のすべてのデータベース シーダーを実行するには、次のようにします.php artisan db:seed

This is a very useful function for setting up your laravel app specially when you are working with a team!