シーダーについて(基本)

2019/06/07

シーダーとは

マイグレーションで DB のテーブルを作成したらテストでサンプルデータをいれてみます。

これをシーダーと言います。

作業手順としては

1.シーダーファイルを作成
2.シーダーファイルの run() にサンプルデータを記述
3.DatabaseSeeder.php でシーダーファイルをコール
4.シーダーの実行

となります。

それでは実際に作成してみます。

 

演習

以前マイグレーションで「employees」(従業員)テーブルを作成しました。

 
このテーブルにサンプルデータを入れます。

 
手順

 

1)シーダーファイルの作成

シーダーファイルの作成はartisanコマンドで用意されています。


php artisan make:seed EmployeesTableSeeder

 
コマンドを実行すると database/seeds/EmployeesTableSeeder.php(シーダーファイル) が作成されます。

 

2)シーダーファイルの編集

runメソッドにサンプルデータを記述をしていきます。

DB の入れるやり方は主に

1.Eloquent
2.DBファサード

の2つがあります。

 

1.Eloquentでデータを入れる場合

:
public function run(){

  // 1レコード
  $employee = new \App\Employee([
    'dept_id' => '1',
    'name' => '川端 莉緒',
    'email' => 'kawabata_rio@example.com'
  ]);
    $employee->save();

  // 2レコード
  $employee = new \App\Employee([
  'dept_id' => '2',
  'name' => '小玉 隆博',
  'email' => 'kodama_takahiro@example.com'
  ]);
  $employee->save();

  // 3レコード
  $employee = new \App\Employee([
  'dept_id' => '1',
  'name' => '岩井 圭',
  'email' => 'iwai_kei@example.com'
  ]);
  $employee->save();

}

ポイント

Eloquent でデータを入れる場合は事前にモデルを作成して登録できる項目を宣言しておく必要があります。

1)モデル作成

php artisan make:model Employee

 

2)カラムに値を挿入できるようにする

:
public $timestamps = false; //timesatampを利用しない
protected $fillable = ['dept_id', 'name', 'email'];
:

 

2.DBファサードを使ってデータを入れる場合

public function run()
{
    \DB::table('employees')->insert([
        [
            'dept_id' => '1',
            'name'    => '川端 莉緒',
            'kawabata_rio@example.com',
            'created_at' => date('Y-m-d H:i:s'),
            'updated_at' => date('Y-m-d H:i:s'),
         ],
        [
            'dept_id' => '2',
            'name'    => '小玉 隆博',
            'kodama_takahiro@example.com',
            'created_at' => date('Y-m-d H:i:s'),
            'updated_at' => date('Y-m-d H:i:s'),
        ],
        [
            'dept_id' => '3',
            'name'    => '岩井 圭',
            'iwai_kei@example.com',
            'created_at' => date('Y-m-d H:i:s'),
            'updated_at' => date('Y-m-d H:i:s'),
        ],
    ]);
}

ポイント

DBファサードを使ってサンプルデータを挿入する場合は、そのまま複数のデータを挿入できます。
※モデルへの fillableguarded の設定をする必要はありません。

 

3)DatabaseSeeder.php 編集

作ったシーダーファイルを DatabaseSeeder.php から呼び出します。

DatabaseSeeder.php はデフォルトで用意されています。


:
public function run(){
 $this->call(EmployeesTableSeeder::class);
}

 

4)シーダー実行

下記のコマンドで DatabaseSeeder.php 内のrunメソッド が実行されるようになります。


php artisan db:seed

ポイント

「does not exist」 とエラーが出る場合は、ターミナルでcomposer dump-autoload を入力してみてください。
そのあとにもう一度シーダーコマンドを入力すると上手くいくかもしれません。

 

5)動作確認


> select * from employees;

基本的なシーダーの使い方については以上です。

本庄マサノリ

仕事でLaravelを使っています。気づいたことや新しい発見など情報を発信していきます。メールはこちら

 

-基礎知識