LoginSignup
162
160

More than 5 years have passed since last update.

Laravelでシーダーを使う

Last updated at Posted at 2016-07-19

テストデータをまとめていれたいときとかに。

シーダーファイルを作る

$ php artisan make:seeder PhotoTableSeeder

database/seedsにシーダー用のクラスができる。
その中にのrunメソッドにデータの流し込みなどの記述をする。

PhotoTableSeeder.php
<?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から呼び出す。
このファイルはデフォルトで用意されている。

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メソッドの最初に データのクリアの処理 を記述するとよい。

クエリビルダを使った場合

PhotoTableSeeder.php
public function run() {
    // データのクリア
    DB::table('author')->truncate();

    // データ挿入
        ・・・・・・
}

DBファザードを使った場合

PhotoTableSeeder.php
public function run() {
    // データのクリア
    \Illuminate\Support\Facades\DB::table('author')->truncate();

    // データ挿入
        ・・・・・・
}
162
160
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
162
160