平凡エンジニアによる平凡ブログ

平凡インフラエンジニアがスキルアップを目指してプログラミングやクラウドやサーバといったインフラのアウトプットをしていきます!

【PHP】Laravelにてテストデータを作成する(Seeder)

今回のテーマ

Laravelでテストデータを作成できるSeederの作成と使い方について
記載します。

環境

Laravel 8.20.1 PHP 7.3.11

目次

  • 1.Seederとは
  • 2.Seeder使用手順
  • 3.まとめ

1.Seederとは

Laravelのドキュメントには以下の通り記載されています。

シーダ(初期値設定)クラスを使用し、テストデーターをデーターベースに設定するシンプルな方法もLaravelには備わっています。 Laravelに標準に備わっている機能でテストデータを作成できます。

データベース:シーディング 8.x (再翻訳中)Laravel

上記の通り、Laravelの標準機能でテストデータを作成できる機能のことです。
例えば一覧の表示を動作確認する際にデータベースにSQLでデータを挿入
せずにテストデータを作成できます。

2.Seeder使用手順

Seeder作成からテストデータの生成までの手順は以下の通りです。

1 Seederの作成

GamesTableSeederの箇所には任意で名前をつけてください。

php artisan make:seeder GamesTableSeeder

// 出力結果
Seeder created successfully.

2.作成されたSeederファイルにデータを記載する。

<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;

class GamesTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        DB::table('games')->insert([
                'game_name'=>'パワプロ',
                'price'=>'2980',
                'genre'=>'スポーツ',
                'user_id'=>'1',
                'cart_item_id'=>'1'

         ],
         [
               'game_name'=>'三國無双',
               'price'=>'7980',
               'genre'=>'アクション',
               'user_id'=>'1',
               'cart_item_id'=>'1'
         ]);

run()メソッドの中にinsert()を使用してデータを挿入しております。
ランダムで挿入する方法もドキュメントに記載されていますが
今回は設定カラムに自分で入れる値を決めています。

3.seederを実行する

--class〜には任意で作成したSeederの名前を入れてコマンドを実行する

php artisan db:seed --class=GamesTableSeeder

// 出力結果
Database seeding completed successfully.

まとめ

以上、Seederの作成方法とファイル記載、そして実行方法を
簡単に記載しました。

今回は自分でテストデータを入力しましたが、ランダムでテストデータを作成するFactoryがあります。

基本はこちらを使用してFactroyでカバーできないテストデータがあれば、今回のようにテストデータを自分で決める方法でいいのではないかと思います。

Factoryについて
データベースのテスト 8.x (再翻訳中)Laravel

参考

データベース:シーディング 8.x (再翻訳中)Laravel