2019/08/06
シーダーとは
マイグレーションで 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ファサードを使ってサンプルデータを挿入する場合は、そのまま複数のデータを挿入できます。
※モデルへの fillable や guarded の設定をする必要はありません。
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のシーダーについてもっと理解を深めたい方は PHPフレームワーク Laravel入門 をお勧めします。
シーダー関連の掲載ページ
Chapter 5 データベースの利用
5.1 データベースを準備する
5.2 DBクラスの利用
5.3 クエリビルダ
5.4 マイグレーションとシーディング

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