LoginSignup
0
0

More than 3 years have passed since last update.

Laravel factoryを使ってテストデータを流し込む

Posted at

開発において必須のテストデータの流し込みの備忘録です。。。
※データベース、モデル、マイグレーション完了時からのお話です。

Factoryを作る

php artisan make:factory [モデル名]Factory

例)
php artisan make:factory RecipeFactory
                ↑クラス名は大文字注意

<?php

/** @var \Illuminate\Database\Eloquent\Factory $factory */

use App\Model;
use Faker\Generator as Faker;

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

こういうのができます。

//のところに入れたいデータを書き込んでいきましょう

<?php

/** @var \Illuminate\Database\Eloquent\Factory $factory */

use App\Recipe;    ←ここ要書き換え!!
use Faker\Generator as Faker;

$factory->define(Recipe::class, function (Faker $faker) {
    return [    ↑ここも要書き換え!!

        'user_id' => $faker->numberBetween($min = 1, $max = 10),
        'name' => $faker->realText($maxNbChars = 10, $indexSize = 1),
        'liqueur' => $faker->numberBetween($min = 1, $max = 10),
        'time' => $faker->numberBetween($min = 1, $max = 10),
        'invention' => $faker->numberBetween($min = 1, $max = 10),
    ];
});

ここで気を付けたいのは
use App\Model;
を書き換えること!
矢印で示しておきました。

ここでモデルを指定してあげないと
InvalidArgumentException : Unable to locate factory with name [default] [App\Recipe].

てな感じでエラーが出ちゃいます(><)

Seederを作る

$php artisan make:seeder [ファイル名]

例)
php artisan make:seeder RecipesTableSeeder

こんな感じ
デフォルトで入っているUsersTableSeederを参考にしてみてください。

<?php

use Illuminate\Database\Seeder;

class AdminTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        //
    }
}

中身はこんな感じ

function run()の中に、Factoryでダミーデータ何個作るかを記述する。

<?php

use Illuminate\Database\Seeder;

class RecipesTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        factory(\App\Recipe::class, 10)->create();  
    }
}

これで10個データができます

最後に、、、

DatabaseSeeder.phpの更新

<?php

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     *
     * @return void
     */
    public function run()
    {
        $this->call(UsersTableSeeder::class);  ←元から入ってるよ
        $this->call(RecipesTableSeeder::class); ←こいつを追加
    }
}

ラスト
$php artisan db:seed で実行

あれなんかおかしいよって人は

composer dump-autoload

試してみてください。

0
0
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
0
0