テストデータをまとめていれたいときとかに。
#シーダーファイルを作る
$ php artisan make:seeder PhotoTableSeeder
でdatabase/seeds
にシーダー用のクラスができる。
その中にのrunメソッドにデータの流し込みなどの記述をする。
<?php
use Illuminate\Database\Seeder;
class PhotoTableSeeder extends Seeder {
public function run() {
$authors = ['田中太郎','山田太郎','佐藤太郎'];
foreach ($authors as $author) {
DB::table('author')->insert('author')
}
}
}
とりあえず実行されているかを確認したいだけであれば print("テスト")
とかもアリ。
###Lumenの場合
make:seeder
コマンドがないので、自分で作る。
新しいクラスを使ったら composer dump-autoload
を忘れずに。
(コマンドがあるLaravelではオートロードまでを勝手にしてくれるらしい)
##callメソッドでシーダーファイルを呼び出す
作ったシーダーファイルをDatabaseSeeder.php
から呼び出す。
このファイルはデフォルトで用意されている。
<?php
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
// 各テーブルへのデータの流し込みを呼び出す
$this->call('PhotoTableSeeder::class');
}
}
###追記:シーダー実行時のオプション
オプションで--class
を使えば特定のシーダーだけ実行される。
$ php artisan db:seed --class=PhotoTableSeeder
#シーダー実行
$ php artisan db:seed
DatabaseSeeder.php内のrunメソッド が実行される。
##シーダーをマイグレーションごと巻き戻したいとき
$ php artisan migrate:refresh --seed
#毎回全データをクリアしてからシーダーを実行する
runメソッドの最初に データのクリアの処理 を記述するとよい。
##クエリビルダを使った場合
public function run() {
// データのクリア
DB::table('author')->truncate();
// データ挿入
・・・・・・
}
##DBファザードを使った場合
public function run() {
// データのクリア
\Illuminate\Support\Facades\DB::table('author')->truncate();
// データ挿入
・・・・・・
}