Laravelでテストデータを用意する方法(Seederの使い方)
いつもご利用ありがとうございます。
この記事には広告が掲載されており、その広告費によって運営しています。
Laravel でテストデータを用意する方法(Seeder の使い方)について書いていきます。
テストデータ とは?
サービスを作る中で、想定される投稿情報や、画像ファイルなど、レイアウトを決めるときやデータの取得のロジックを作る際に、様々なテストデータを用意します。
Laravel では Seeder という機能で、テストデータを簡単にチームで共有することができます。
いちいち各々でテストデータを Tinker などで挿入するよりも、圧倒的に効率が良い方法となります。
この記事の内容は公式ドキュメント(シーディング)の要約となります
検証環境
Laravel 6
テーブル設計
この状態のテーブルに対してテストデータを作っていきます。
コマンドでファイルを生成する
コマンドで Seeder ファイルを作成します。
php artisan make:seeder UsersTableSeeder
databases/seeds/UsersTableSeeder.php が生成されました。
シーダーにテストデータを書く
UsersTableSeeder.php
<?php
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\Hash;
class UsersTableSeeder extends Seeder
{
public function run()
{
DB::table('users')->delete();
$data = [
[
'name' => 'ユーザー1',
'email' => 'user1@test.com',
'password' => Hash::make('password'),
'created_at' => now(),
'updated_at' => now()
]
];
DB::table('users')->insert($data);
}
}
書き方は様々あると思いますが、自分はこのように$data を 定義して insert しています。
DatabaseSeeder.php に定義する
databases/seeds/DatabaseSeeder.php を編集してさきほど作成した Seeder ファイルを読み込ませます。
public function run()
{
$this->call(UsersTableSeeder::class);
}
このように定義したら、コマンドを打ちます。
composer dump-autoload
下のような感じでクラスが読み込まれたら OK です。
composer dump-autoload
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover --ansi
Discovered Package: diglactic/laravel-breadcrumbs
Discovered Package: facade/ignition
Discovered Package: fideloper/proxy
Discovered Package: laravel/tinker
Discovered Package: laravel/ui
Discovered Package: nesbot/carbon
Discovered Package: nunomaduro/collision
Package manifest generated successfully.
Generated optimized autoload files containing 5233 classes
そしたら、 あとはコマンドで seeder を発動させるだけです。
コマンド
php artisan db:seed
または
php artisan migrate:fresh --seed
php artisan db:seed はシンプルにデータベースはそのままで seeder ファイルだけ読み込ませたい時。
php artisan migrate:fresh --seed は、いったんデータをフレッシュ(初期化という表現が正しいかわからないけど、初期化するイメージ)させてから seeder でテストデータを入れる時。
開発環境だと Seeder でテストデータを基本的に生成すれば良いことが多いので、
php artisan migrate:fresh --seed
を使うことが個人的には多いです。
シーダーファイルで for 文を使う
サンプルで置いておきます。
参考にしてみてください。
public function run()
{
DB::table('users')->delete();
for($i = 0; $i < 100; $i++){
$data[] =
[
'name' => "ユーザー${i}",
'email' => "user${i}@test.com",
'password' => Hash::make('password'),
'created_at' => now(),
'updated_at' => now()
];
}
DB::table('users')->insert($data);
}
普通に配列に追加していけば良いです。
まとめ
いかがだったでしょうか?
以上が Laravel でテストデータを作る方法として Seeder を使う手順となります。
感想や誤字などありましたら、TwitterDM からご連絡お願いします。
人気記事