Laravel シーダー 調べてみた

シーダーとは

シーダーとは、データベースのデータをコードを用いて投入することが出来る仕組みです。

主に、初期データやテストデータの投入などで利用されます。

コードで管理できるため、gitでの管理やバージョン管理が可能です。

具体的な流れは、以下の流れになります。

①シーダーファイルの作成

②シーダーファイル編集

③シーダー実行

 

シーダーファイルの作成

シーダーファイルは以下コマンドで作成することができます。

php artisan make:seeder ファイル名

このコマンドを実行することで、App/database/seeders内に指定したファイル名のファイルが作成されます。

 

シーダーファイル編集

上記コマンドで作成されたファイルはデフォルトで以下のようになっています。

(クラス名は指定したファイル名になります)

<?php
namespace Database\Seeders;

use Illuminate\Database\Seeder;

class testSeeder extends Seeder
{
 public function run()
 {
   //
 }
}

シーダー実行時にrunメソッドが呼ばれるので、runメソッド内にシーダー作成の処理を書いていきます。

シーダーの記述方法は、DBファザードやEloquentを利用して記述することができます。

以下、DBファザードを利用してシーダーを作成する例になります。

<?php
namespace Database\Seeders;

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

class testSeeder extends Seeder
{
 public function run()
 {
   DB::table('tests')->insert([
   [
     name => 'test1',
     email => 'test1@test.com'
   ],
   [
     name => 'test2',
     email => 'test2@test.com'
   ],
 ]);
 }
}

しかし、データを手作業で作成する場合はこれで良いのですが、テストデータなどランダムでデータを作成する場合は1つ1つデータを考えるのが面倒です。

そこで利用できるのが、Fakerというライブラリです。

以下Fakerを利用してダミーデータを作成した例になります。

<?php
namespace Database\Seeders;

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

class testSeeder extends Seeder
{
 public function run()
 {
   $faker = \Faker\Factory::create('ja_JP'); ・・・①
   DB::table('tests')->insert([
   [
     name => $faker->name, ・・・②
     email => $faker->email
   ],
   [
     name => $faker->name,
     email => $faker->email
   ],
  ]);
 }
}

①日本語設定で、Fakerを作成します。

②$fakerのnameにアクセスすることでダミーの名前を作成します。

$fakerにアクセスできる値は他にもあるので、気になったら調べてみてください。

 

シーダー実行

シーダを実行するには、App/database/seeders/DatabaseSeeder.phpに作成したシーダーファイルを設定します。

App/database/seeders/DatabaseSeeder.php

<?php
namespace Database\Seeders;

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
 public function run()
 {
   $this->call(testSeeder::class); ・・・①
 }
}

①callメソッドの引数に作成したシーダーファイルを設定します。

ここまで設定できたら以下コマンドを実行します。

php artisan db::seed

これでシーダーファイルに設定したデータがデータベースに保存されます。

以上!!!!!!!