Laravelにはシーディングというテストデータを簡単に作成する機能があったのでドキュメントを参考に使ってみた。
Laravel 5.4 データベース:シーディング
readouble.com/laravel/5.4/ja/seeding.html
シーダーファイル及びクラスの作成
以下のコマンドを実行すると「database/seeds」ディレクトリにファイルが「UsersTableSeeder.php」が生成される。
php artisan make:seeder UsersTableSeeder
作成された UsersTableSeeder.php にDBにテストデータを追加するコードを書いて保存。
<?php use Illuminate\Database\Seeder; use Illuminate\Database\Eloquent\Model; class UsersTableSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { DB::table('users')->insert([ 'name' => str_random(10), 'email' => str_random(10).'@gmail.com', 'password' => bcrypt('secret'), ]); } }
DatabaseSeeder.phpに作成したシーダを呼び出す記述を追加
DatabaseSeeder.phpは最初から存在しているので作成不要。
UsersTableSeederを呼び出す記述を追加して保存する。
<?php use Illuminate\Database\Seeder; class DatabaseSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { $this->call(UsersTableSeeder::class); } }
複数回実行したい場合はモデルファクトリを利用したほうが便利らしいが、今回はスルーしてforで回す。
for($i=0; $i<10; $i++) { $this->call(UsersTableSeeder::class); }
シーダの実行
// DatabaseSeederクラスからをUsersTableSeederが実行される php artisan db:seed // UsersTableSeederを直接実行する php artisan db:seed --class=UsersTableSeeder
マイグレーションをロールバックし再実行するmigrate:refreshコマンドに「–seed」オプションを付けると、シードも一緒に実行してくれる。
php artisan migrate:refresh --seed
クラスが見つからないとエラーが出る場合
Class UsersTableSeeder does not exist
下記でautoloadされるクラスを再定義すると上手くいった。
composer dump-autoload