seeding(シーディング)
Laravelでは、データベースに対して初期状態でいくつかのダミーデータを挿入する仕組みも用意されています。この仕組みとして用意されている機能をシーディングと呼びます。
単体機能として「artisan」のdbコマンドでシーディングを実行することもできますが、マイグレーションと同時にダミーデータの挿入もできます。
シーダーファイルの作成
シーディングの実行には、シーダーファイルを作成する必要があります。
1 |
php artisan make:seeder MemberTableSeeder |
このコマンドで以下の場所にシーダーファイルが作成されます。
databese/seeds/MemberTableSeeder.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?php namespace Database\Seeders; use Illuminate\Database\Seeder; class MemberTableSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { // } } |
シーダーファイルにレコード作成クエリを記述
ファイルの冒頭でモデルを読み込みます
1 |
use App\Models\Member |
runメソッド内にレコード挿入クエリを記述します。
databese/seeds/MemberTableSeeder.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
<?php namespace Database\Seeders; use Illuminate\Database\Seeder; use App\Models\Member; class MemberTableSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { Member::create([ 'name' => '田中太郎', 'age' => 46, 'mail' => 'toro@cyber-genjin.net' ]); Member::create([ 'name' => '山田花子', 'age' => 46, 'mail' => 'hanako@cyber-genjin.net' ]); Member::create([ 'name' => '坂上太陽', 'age' => 46, 'mail' => 'taiyou@cyber-genjin.net' ]); } } |
シーダーファイルの登録
シーディングを実行するには、作成したシーダーファイルを登録する必要があります。
作成したシーダーファイルをと同じ階層にもとからあった「DatabaseSeeder.php」に登録します。
runメソッドに以下の1行を追記します。
1 |
$this->call(MemberTableSeeder::class); |
databese/seeds/DatabaseSeeder.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?php namespace Database\Seeders; use Illuminate\Database\Seeder; class DatabaseSeeder extends Seeder { /** * Seed the application's database. * * @return void */ public function run() { // \App\Models\User::factory(10)->create(); $this->call(MemberTableSeeder::class); } } |
シーディングの実行
シーディングの実行は、「artisan」コマンドです。
1 |
php artisan db:seed |
データベースのテーブルに正しくレコードが追加されているか確認してください。
(て正しく動作しない場合は、テーブルの設定や制約見直してください)
テーブルのmigrate実行時にシーディングも実行
テーブル作成時にシーディングを実行することでダミーデータを同時に挿入することもできます。
1 |
php artisan migrate --seed |
テーブルの再作成をする際にもシーディングを実行できます。
1 |
php artisan migrate:fresh --seed |