LoginSignup
3
2

More than 1 year has passed since last update.

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

Last updated at Posted at 2021-09-11

暇なときに予定を探せるアプリyoteiPickerをリリースしました。

この記事では、実際の実務で使っている方法で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

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://www.kamome-susume.com/enginner-job-change-site/

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2