Laravelではseeder・factory・fackerを組み合わせることで手早くダミーデータを用意することができます。
今回はidとusername、contentといったカラムを持つテーブルが既にあることにします。
## Factoryファイルを生成する
モデルを生成するメソッドにfactoryというものが用意されています。factoryを使うためにはモデル名に対応したFactoryファイルが必要になります。
後述するfakerというダミーデータを用意するクラスがすでに読み込まれている状態で生成されるのでseederで手作業で考えるより簡単に用意することが出来ます。
```bash
php artisan make:factory EntryFactory
```
```php
/* @var $factory \Illuminate\Database\Eloquent\Factory */
use App\Model;
use Faker\Generator as Faker;
$factory->define(Model::class, function (Faker $faker) {
return [
//
];
});
```
## Fakerでダミーデータを追加する
fakerはランダムな数値や文字列を生成してくれます。無作為に文字や数値がデータになるのではなく、人名や企業名などある程度意味のある文字列が用意されており、日本語にも対応しています。
Laravelのfacoryで呼ばれているfakerはデフォルトでは英語の文字列を返すので、`config/app.php`を以下のように編集します。
```php
- 'faker_locale' => 'en_US',
+ 'faker_locale' => 'ja_JP',
```
このように指定することで、そのプロジェクト上でのfakerは全て日本語対応となります。
fakerで使えるダミーデータはいくつかありますが以下のサイトで主なデータが一覧になっています。
[ダミーデータを生成するPHPライブラリ Faker | ](https://helloworld-blog.tech/php/%E3%83%80%E3%83%9F%E3%83%BC%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E7%94%9F%E6%88%90%E3%81%99%E3%82%8Bphp%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA-faker)
今回はusernameとcontentを指定しました。
```php
/* @var $factory \Illuminate\Database\Eloquent\Factory */
use App\Entry;
use Faker\Generator as Faker;
$factory->define(Entry::class, function (Faker $faker) {
return [
'usernamer' = $faker->name,
'content' => $faker->realText,
];
});
```
## Seederを実行する
Factoryファイルを用意しただけでは実行されないため、何処かで呼び出す必要があります。
コマンドラインから実行できるようにSeederで呼び出します。
```bash
php artisan make:seeder EntryTableSeeder
```
Seederファイルを生成したあと、runメソッドの中でfactoryを呼び出します。
```php
use Illuminate\Database\Seeder;
class EntryTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
factory(App\Entry::class, 10)->create();
}
}
```
factoryでは第一引数にモデル名、第二引数に生成する個数を指定します。
facotryを使わない場合seederでfackerの呼び出しやループ文で回数を指定する必要がありますが、factoryを使うことでワンライナーにすることができます。