人気のPHP WEBアプリケーションフレームワークLaravelのTipsを記録していきます

LaravelでFactoryとFakerとSeederを使ってダミーデータを作成する

● LaravelでFactoryとFakerとSeederを使ってダミーデータを作成する

PHPのFakerです。Faker Senpai ではないです。
Laravelだと標準でFakerがインストールされ、とても簡単に扱えるのでデータを作成する際には是非利用しましょう。
(Laravelアプリのインストール、モデルファイルはすでに用意してある前提で進めます。 )

Factoryを日本語で使用する

config/app.php の一番下に以下を追加

'faker_locale' => 'ja_JP',

先ずはダミーデータがどのようなデータになるか確認する

routes/web.php に以下を追加

Route::get('/faker', function () {
	$faker = Faker\Factory::create('ja_JP');
	$dummyData = [
		'random_no'                     => $faker->randomNumber(4) ,  // 最大4桁の数字
		'name'                     => $faker->name,
		'password'                 => $faker->password,
		'country'                  => $faker->country,
		'prefecture'               => $faker->prefecture,
		'city'                     => $faker->city,
		'postcode'                 => $faker->postcode,
		'address'                  => $faker->address,
		'streetAddress'            => $faker->streetAddress,
		'phoneNumber'              => $faker->phoneNumber,
		'email'                    => $faker->email,
		'safeEmail'                => $faker->safeEmail, // (実在しないアドレスのため処理とかで使っても安心)
		'company'                  => $faker->company,
		'iso8601'                  => $faker->iso8601($max = 'now'),
		'dateTimeBetween'          => $faker->dateTimeBetween($startDate = '-110 years', $endDate = 'now')->format('Y年m月d日'),
		'numberBetween'            => $faker->numberBetween($min = 100, $max = 200),
		'title'                    => $faker->title,
		'realText'                 => $faker->realText($maxNbChars = 50, $indexSize = 2),
		'randomNumber'             => $faker->randomNumber($nbDigits = NULL),
		'randomFloat'              => $faker->randomFloat($nbMaxDecimals = NULL, $min = 0, $max = NULL),
		'randomElement'            => $faker->randomElement($array = ['男性', '女性']),
		'lexify'                   => $faker->lexify($string = '??????'),
		'hexcolor'                 => $faker->hexcolor,
		'ipv4'                     => $faker->ipv4,
		'url'                      => $faker->url,
		'imageUrl'                 => $faker->imageUrl($width = 640, $height = 480, $category = 'cats', $randomize = true, $word = null),
		'userAgent'                => $faker->userAgent,
		'creditCardType'           => $faker->creditCardType,
		'creditCardNumber'         => $faker->creditCardNumber,
		'creditCardExpirationDate' => $faker->creditCardExpirationDate,
		'isbn13'                   => $faker->isbn13,
		'isbn10'                   => $faker->isbn10,
	];
	dump($dummyData);
	exit();
});

http://YOUR-APP.TLD/faker にアクセスして表示させます。 次のようなダミーデータが表示されます。

array:31 [▼
  "random_no" => 724
  "name" => "浜田 舞"
  "password" => "sPz?uT[rr"
  "country" => "ドミニカ国"
  "prefecture" => "埼玉県"
  "city" => "廣川市"
  "postcode" => "9926575"
  "address" => "1202087  大阪府加藤市西区原田町廣川1-8-9"
  "streetAddress" => "若松町山岸5-1-2"
  "phoneNumber" => "05-4265-9978"
  "email" => "mitsuru67@gmail.com"
  "safeEmail" => "chiyo.kanou@example.net"
  "company" => "株式会社 喜嶋"
  "iso8601" => "1984-04-25T21:15:23+0000"
  "dateTimeBetween" => "1974年08月07日"
  "numberBetween" => 125
  "title" => "Dr."
  "realText" => "るしていただおじぎを捕とりと歴史れきしになって、と思ってすうりんどんどん流ながら上着うわぎのりを川。"
  "randomNumber" => 55
  "randomFloat" => 6539745.6
  "randomElement" => "男性"
  "lexify" => "znkbep"
  "hexcolor" => "#fb573b"
  "ipv4" => "136.204.203.254"
  "url" => "http://wakamatsu.jp/delectus-aspernatur-unde-quae-explicabo-aut-nisi"
  "imageUrl" => "https://lorempixel.com/640/480/cats/?97142"
  "userAgent" => "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_2) AppleWebKit/5330 (KHTML, like Gecko) Chrome/37.0.841.0 Mobile Safari/5330"
  "creditCardType" => "Visa"
  "creditCardNumber" => "4485419150999"
  "creditCardExpirationDate" => DateTime @1634115758 {#207 ▼
    date: 2021-10-13 09:02:38.0 UTC (+00:00)
  }
  "isbn13" => "9793648060130"
  "isbn10" => "7424451421"
]

引用: https://goo.gl/VmSXqV
参考: https://fwhy.github.io/faker-docs/ 参考: https://bit.ly/3roaudM

artisanコマンドから Factory を作成する

モデル「Client.php (DBテーブル名:client)」に対する「ClientFactory」を作成します。

php artisan make:factory ClientFactory

完了すると database/factories/ClientFactory.php が作成されています

デフォルトでは

$factory->define(Model::class, function (Faker $faker) {
    return [
        //
    ];
});

となっているのでここに設定を記述して行きます。

    return [
		'client_name'    =>  $faker->name ,
		'addr_name'      =>  $faker->address,
    ];

またクラス名も変更しておきます。

use App\Model;
use Faker\Generator as Faker;
$factory->define(Model::class, function (Faker $faker) {

  ↓

use App\Client;
use Faker\Generator as Faker;
$factory->define(App\Client::class, function (Faker $faker) {

該当クラス( Client )に書き換えた例。↑

これでOKです。

Seederファイルを作成する

以下の内容で database/seeds/ClientsSeeder.php を作成する

<?php

use Illuminate\Database\Seeder;

class ClientsSeeder extends Seeder {

    public function run()
    {
    	// 10件作成
      factory(App\Client::class, 10)->create();
    }

}

シーダー実行ファイルに記述してあげます

database/seeds/DatabaseSeeder.php

    public function run()
    {
        $this->call(ClientsSeeder::class);
    }

artisanからシーダーを実行する

まずキャッシュを削除する

php artisan cache:clear; php artisan config:clear; php artisan route:clear; php artisan view:clear; composer dump-autoload

データを全て作り直し、シーダーを実行します

php artisan migrate:fresh --seed
No.1359
02/05 16:10

edit