【実務で使えるLaravel】seederでデータベースにダミーデータを投入しよう

暇なときに予定を探せるアプリ[yoteiPicker](https://yoteipicker.com/)をリリースしました。

この記事では、実際の実務で使っている方法でLaravelのseederを使って、データを投入する流れを説明します。

【開発環境】
Docker 20.10.7
PHP 7.4.22
Laravel 8.53.1
mySQL 5.7
データベースのツール　phpmyadmin

##seederとは
seederとは日本語に訳すと「種をまく」となります。つまり、データにタネをまく＝データを投入すると言い換えられます。
開発現場では、開発中にいちいちデータベースを操作してデータを1件ずつ投入するのは面倒です。
シーダーを使えば、事前に定義しておいたダミーデータをコマンド一発でデータベースに投入できます。

##実際の流れ

##実際にseederを活用してデータベースにダミーデータを投入する
今回は、本を管理するアプリを想定します。
ダミーデータとして、users,books,categoriesテーブルにデータを投入します。

```ターミナル
$ php artisan make:seeder initBooksSeeder
```

database>seeders>initBooksSeederが作成されます。

試しにusersのダミーデータを投入してみましょう。

```database>seeders>initBooksSeeder.php
<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB; //追加
use Illuminate\Support\Str; //追加
use Illuminate\Support\Facades\Hash; //追加

class initBooksSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        DB::table('users')->insert([
            'user_name' => Str::random(10),
            'email'     => Str::random(10).'@gmail.com',
            'password'  => Hash::make('password'),
        ]);
    }
}

```

編集できたら、以下を実行してダミーデータを投入する。

```
$ php artisan db:seed --class=initBooksSeeder
```
データベースを確認すると、データが1件登録されているのが確認できますね。
![スクリーンショット 2021-09-11 16.55.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1693248/2912261b-f47b-0389-247c-d0017940288e.png)

usersテーブルにデータが登録できることがわかったので、users,books,categoriesテーブルにデータを投入していきましょう。

以下のコマンドを実行すると、すべてのテーブルが削除され、すべてのマイグレーションが再実行されます。このコマンドは、データベースを完全に再構築するのに役立ちます。
```
$ php artisan migrate:fresh --seed
```

これでデータベースのデータは綺麗さっぱりなくなり、テーブルには何もデータがない状態にできました。

users,categories,bookテーブルにデータを3件ずつ投入するように私は実装してみました。

```database>seeders>initBooksSeeder.php
<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB; //追加
use Illuminate\Support\Str; //追加
use Illuminate\Support\Facades\Hash; //追加

class initBooksSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        DB::table('users')->insert([
            [
                'user_name' => Str::random(10),
                'email'     => Str::random(10).'@gmail.com',
                'password'  => Hash::make('password'),
            ],
            [
                'user_name' => Str::random(10),
                'email'     => Str::random(10).'@gmail.com',
                'password'  => Hash::make('password'),
            ],
            [
                'user_name' => Str::random(10),
                'email'     => Str::random(10).'@gmail.com',
                'password'  => Hash::make('password'),
            ],
        ]);

        DB::table('categories')->insert([
            [
                'user_id'       => 1,
                'category_name' => Str::random(10),
            ],
            [
                'user_id'       => 2,
                'category_name' => Str::random(10),
            ],
            [
                'user_id'       => 3,
                'category_name' => Str::random(10),
            ],
        ]);

        DB::table('books')->insert([
            [
                'user_id'     => 1,
                'category_id' => 1,
                'book_name'   => Str::random(5),
            ],
            [
                'user_id'     => 1,
                'category_id' => 1,
                'book_name'   => Str::random(5),
            ],
            [
                'user_id'     => 1,
                'category_id' => 1,
                'book_name'   => Str::random(5),
            ],
        ]);
    }
}
```

```
$ php artisan db:seed --class=initBooksSeeder
```
上記を実行すれば、データが3件ずつ投入されているのが確認できます。

暇なときに予定を探せるアプリ[yoteiPicker](https://yoteipicker.com/)をリリースしました。

エンジニア・フリーランスにおすすめの転職サイト↓
https://www.kamome-susume.com/enginner-job-change-site/