はじめに
railsの勉強してたら「PHPでSeeder使えるのかな」と思って
ググったら真っ先にLaravelが出てきたので実装してみました。
Seederとは?
種をまく人、種まき機、種取り機
(参考:https://ejje.weblio.jp/content/seeder)
Laravelではデータベースにテストデータを一斉に挿入する処理を指します。
DBに種をまくというイメージです。
実装
artisan
コマンドでseeder
クラスを生成します。
ターミナルで
php artisan make:seeder "seederClass"
を実行すると、 database/seeds
下にDatabaseSeeder.php
とseederClass.php
が生成されます。
DatabaseSeeder.php
の中身は以下のようになっています。
<?php
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Seed the application's database.
*
* @return void
*/
public function run()
{
// $this->call(UsersTableSeeder::class);
}
}
後述の実行コマンドが叩かれた際はこのrun()が呼び出されます。
seederClass.php
の中身は以下のようになっています。
<?php
use Illuminate\Database\Seeder;
class seederClass extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
//
}
}
上記のrun()にDBへの挿入処理を書いていきます。
Databaseの設定はconfig/database.php
で行います。
<?php
return [
// ....
'default' => env('DB_CONNECTION', 'mysql'),
// ....
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'hoge'), // ここで記述したデータベースを使用
'username' => env('DB_USERNAME', 'hoge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
],
// ....
];
];
実際にrun()を実装してみます。
<?php
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Seed the application's database.
*
* @return void
*/
public function run()
{
$this->call(seederClass::class);
}
}
<?php
use Illuminate\Database\Seeder;
class seederClass extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
DB::table('table')->insert([
'name' => 'username',
'email' => 'mail@example.com'
]);
}
}
記述後、ターミナルで
php artisan db:seed
を実行するとダミーデータの挿入が完了する。
#おわりに
実はseederはテーブル作成で使われることが多いです。
ダミーデータの挿入はfaker
とfactory
を使うので、seeder
だけで行うケースは少ないです。
今回は簡単なデータ挿入ですのでseeder
だけで行いました。
faker
やfactory
を使ったダミーデータの挿入は後日公開いたしますのでご期待ください。
参考文献
・weblio-seederとは
・Qiita-Laravelでシーダーを使う
・Laravel 5.6 データベース:シーディング