Laravel5.4のシーダーを使ってみる

スポンサーリンク

Laravelにはシーディングというテストデータを簡単に作成する機能があったのでドキュメントを参考に使ってみた。

Laravel 5.4 データベース:シーディング
readouble.com/laravel/5.4/ja/seeding.html

シーダーファイル及びクラスの作成

以下のコマンドを実行すると「database/seeds」ディレクトリにファイルが「UsersTableSeeder.php」が生成される。

php artisan make:seeder UsersTableSeeder

作成された UsersTableSeeder.php にDBにテストデータを追加するコードを書いて保存。

<?php

use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;

class UsersTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        DB::table('users')->insert([
            'name' => str_random(10),
            'email' => str_random(10).'@gmail.com',
            'password' => bcrypt('secret'),
        ]);
    }
}

DatabaseSeeder.phpに作成したシーダを呼び出す記述を追加

DatabaseSeeder.phpは最初から存在しているので作成不要。
UsersTableSeederを呼び出す記述を追加して保存する。

<?php

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $this->call(UsersTableSeeder::class);
    }
}

複数回実行したい場合はモデルファクトリを利用したほうが便利らしいが、今回はスルーしてforで回す。

for($i=0; $i<10; $i++) {
    $this->call(UsersTableSeeder::class);
}

シーダの実行

// DatabaseSeederクラスからをUsersTableSeederが実行される
php artisan db:seed

// UsersTableSeederを直接実行する
php artisan db:seed --class=UsersTableSeeder

マイグレーションをロールバックし再実行するmigrate:refreshコマンドに「–seed」オプションを付けると、シードも一緒に実行してくれる。

php artisan migrate:refresh --seed

クラスが見つからないとエラーが出る場合

Class UsersTableSeeder does not exist

下記でautoloadされるクラスを再定義すると上手くいった。

composer dump-autoload
Laravel
スポンサーリンク
adminをフォローする
STOCKCODE