2020/08/12
シーダーとは
マイグレーションで DB のテーブルを作成したらテストでサンプルデータをいれてみます。
これをシーダーと言います。
Laravel においてシーダーとはデータベースにテストデータを一斉に挿入する処理を指します。
シーダー(Seeder)とは英語で「種をまく人」という意味になります。
DB に種をまくイメージですね。
シーダーの作業手順としては
1.シーダーファイルを作成
2.シーダーファイルの run() にサンプルデータを記述
3.DatabaseSeeder.php でシーダーファイルをコール
4.シーダーの実行
となります。
それでは実際に作成してみます。
演習
以前マイグレーションで「employees」(従業員)テーブルを作成しました。
このテーブルにサンプルデータを入れます。
手順
1)シーダーファイルの作成
シーダーファイルの作成はartisanコマンドで用意されています。
php artisan make:seeder 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' => '川端 莉緒',
'email' => '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' => '小玉 隆博',
'email' => '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' => '岩井 圭',
'email' => '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;
基本的なシーダーの使い方については以上です。
PHPフレームワーク Laravel入門 第2版
僕がはじめてLaravelを学習するために参考にしたサイトは、掌田津耶乃(しょうだつやの)さんの libro というサイトです。当時(2016年)、Laravel学習サイトの中でもこのサイトは群を抜いてわかりやすく説明されていたので、とても勉強になったのを覚えています。この本は掌田津耶乃さんが書いた本なので、わかりやすく解説されているだろうと kindle で購入しました。2020年8月の時点でいうと日本国内にて唯一の Laravel の良書と言っても良いかと思います。口コミでもLaravel本のロングセラー定番解説書として認知されています。当サイトではチュートリアル形式でLaravelを解説しているので、初心者の方はこの本とセットで学習されるといいと思います。しかし、かなりわかりやすく解説されているとはいえ、PHP中級者以上のスキルは必要です。PHP自体の知識が乏しい方は 独習PHP 第3版 をあわせて購入することをお勧めします。
仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら。