前回まで、Laravel 5.6, 5.7 管理画面パッケージ「Voyager」を紹介してきましたが、色々機能を確かめたいけど、画面からテストデータを追加するのだるい、、、
ということで、今回はLaravel 5.6, 5.7でテーブルにテストデータを一気に投入する、Seeder機能を紹介します。
条件として
products テーブル:name(text), price(int), tag_id(int)
tagsテーブル:name(text)←既に5データ投入済
tag_idにはtagsデータのid,1~5が入るものとします。
ファイル作成
Laravel5.6 のartisanコマンドから以下を実行します。
1 2 3 |
php artisan make:seeder ProductsTableSeeder php artisan make:factory ProductFactory --model=Product |
php artisan make:seeder ProductsTableSeederコマンドにてモデルシーダを作成します。このファイルにはrunメソッドがデフォルトで用意されているので、少量のテストデータの準備でしたらこの中に直接記述でOKです。
php artisan make:factory ProductFactory –model=Productで、大量投入用のデータを自動で作成してくれるモデルファクトリを作成します。–model=Productでデフォルトのモデルを指定しています。
ファイル編集
・ProductFactory編集
1 2 3 4 5 6 7 8 9 10 11 |
<?php use Faker\Generator as Faker; $factory->define(App\Product::class, function (Faker $faker) { return [ 'name' => str_random(10), 'price' => rand(100,1000), 'tag_id' => rand(1,5), ]; }); |
モデルファクトリの中で、投入するデータのルールを記述します。今回は
name:ランダムで10文字、price:100~1000の乱数、tag_id:1~5の乱数とします。
・ProductsTableSeeder編集
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php use Illuminate\Database\Seeder; class ProductsTableSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { factory(App\Product::class, 100)->create(); } } |
runメソッドにモデルファクトリを使用する記述をします。100は作成するデータ数です。ですので上記ですと、ProductFactoryを使用して100個モデルデータを作成する記述になります。
実行
コンソールから下記のコマンドを実行します。
1 2 |
composer dump-autoload php artisan db:seed --class=ProductsTableSeeder |
php artisan db:seed でSeederを実行します。今回はProductsTableSeederのみ実行したかったので、クラスを指定して実行しました。
データが入っていることが確認出来ました。
FactoryではFaker PHPライブラリーのインスタンスを受け取っているので、名前やメールアドレス、住所なども自動入力可能です。
Seederでは、リレーションデータの作成も可能です。ドキュメントに色々載っていますので、ぜひ活用してください。
コメントを書く