LoginSignup
31
19

More than 3 years have passed since last update.

Laravel ダミーデータ登録(seeder, factory, faker)

Posted at

ダミーデータの登録

  • seeder: ダミーデータを登録する
    • 少量のデータであればこれだけでOK
  • factory: ダミーデータを量産する装置
  • faker: 装置を使用してダミーデータを生成する

少数のデータ登録の場合

seederを作成し、データを直に入れる

$ php artisan make:seed UsersTableSeeder
UsersTableSeeder
public function run()
    {
        // $this->call(UsersTableSeeder::class);
        DB::table('depts')->insert([
        ['id' => '1',
        'name_id' => '1',
        'created_at' => date('Y-m-d H:i:s'),
        'updated_at' => date('Y-m-d H:i:s'),
        ],
        [
        'id' => '2',
        'name_id' => '2',
        'created_at' => date('Y-m-d H:i:s'),
        'updated_at' => date('Y-m-d H:i:s'),
        ]
    }   

モデルごとに作成したseederを紐付ける

DatabaseSeeder.php
public function run()
    {
          $this->call(UsersTableSeeder::class);
    }

登録

$ php artisan db:seed
$ php artisan db:seed --class=UsersTableSeeder
# データベース初期化する場合
$ php artisan migrate:refresh --seeder

多数のデータ登録の場合

factoryの作成

$ php artisan make:factory UserFactory

生成したfactoryファイルにfakerを使って生成する

生成したfactoryファイルのModelと書かれたところを、使用するModel名に変更する

UserFactory.php
$factory->define(User::class, function (Faker $faker) {
    return [
        'name' => $faker->name(),
        'email' => $faker->email,
        'password' => $faker->password, // password
        'created_at' => $faker->datetime($max = 'now', $timezone = date_default_timezone_get()),
        'updated_at' => $faker->datetime($max = 'now', $timezone = date_default_timezone_get())
    ];
});

seederを作成する

$ php artisan make:seed UsersTableSeeder

使用するfactoryと生成するダミーデータの個数を追記する

UsersTableSeeder
class UsersTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        factory(User::class, 50)->create();
    }
}

モデルごとに作成したseederを紐付ける

DatabaseSeeder.php
public function run()
    {
          $this->call(DeptsTableSeeder::class);
    }

登録

$ php artisan db:seed
$ php artisan db:seed --class=UsersTableSeeder
# データベース初期化する場合
$ php artisan migrate:refresh --seeder

(補足)日本語のダミーデータを登録する

デフォルトでは英語のダミーデータが生成されが、設定すれば日本語のダミーデータが生成できるようになる

config/app.php
'faker_locale' => env('APP_FAKER_LOCALE', 'ja_JP')
.env
// 追記
APP_FAKER_LOCALE=ja_JP

上記2ファイルの設定が終わると、次のコマンドでキャッシュを更新して登録すれば日本で登録される

$ php artisan config:cache
# 次のコマンドを打つと壊れるので注意
$ php artisan config:clear

(補足)使えそうなfakerリスト

'name' => $faker->name(),
'email' => $faker->email,
'password' => $faker->password, // password
'created_at' => $faker->datetime($max = 'now', $timezone = date_default_timezone_get()),
'updated_at' => $faker->datetime($max = 'now', $timezone = date_default_timezone_get()),

$faker->sentence(rand(1,4)), // 1〜4つの単語で文章
$faker->realText(512), // 512文字の文章 
$faker->word() // 単語
$faker->sentence(n) //単語数指定した文章
$faker->text($max) //$max文字数までの文章
$faker->name() //名前 (日本語)
$faker->realText() //文字数指定した文章 デフォルトは200(日本語)
$faker->phoneNumber() //電話番号(日本語)
$faker->address() //住所(日本語)
$fake->company() //会社名(日本語)
$faker->randomElement(['男性', '女性'])

(補足)リレーション関係でのfaker

use App\User
'user_id' => factory(User::class)->create()->id,

参考

31
19
0

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
31
19