laravel テストデータ作成

Laravel

1,作成方法1

以下コマンドでテーブル用のSeederを作ります。

php artisan make:seed target_usersSeeder

seeders\target_usersSeeder.php

<?php

namespace Database\Seeders;

use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Ramsey\Uuid\Uuid;

class target_usersSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $names = [
            'taro' => '太郎',
            'jiro' => '次郎',
            'takesi' => 'タケシ'
        ];

        foreach ($names as $name_jp => $name_jp) {

            // \App\Models\target_users::create
            DB::table('target_users')->insert([
                'name' => $name_jp,
                'email' => $name_jp .'@example.com',
                'uuid' => Uuid::uuid4(),
                'password' => '$2y$10$92IX'
            ]);
        }
    }
}

target_usersSeederの変更が完了したら、DatabaseSeeder.phpに登録してコマンドを実行します。

DatabaseSeeder.php

    public function run()
    {
        $this->call(target_usersSeeder::class);
    }
php artisan migrate:fresh --seed

2、作成方法2

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

php artisan make:factory TargetUser

artisanコマンド実行時にTargetUserを指定したので、$model変数にモデルのTargetUserクラスが指定されています。これで、ModelとFactoryが関連付けとFactoryのdefinitionメソッドを修正する。

TargetUserFactory.php

<?php

namespace Database\Factories;

use Illuminate\Database\Eloquent\Factories\Factory;
use App\Models\TargetUser; //追加
use Ramsey\Uuid\Uuid;

/**
 * @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Model>
 */
class TargetUserFactory extends Factory
{

    /**
     * The name of the factory's corresponding model.
     *
     * @var string
     */
    protected $model = TargetUser::class;

    /**
     * Define the model's default state.
     *
     * @return array<string, mixed>
     */
    public function definition(): array
    {
        return [
            'name' => $this->faker->name(),
            'email' => $this->faker->unique()->safeEmail(),
            'uuid' => Uuid::uuid4(),
        ];
    }

}

モデルの方にも必要な記載がります。

TargetUser.php

    // 変更可能なカラム
    protected $fillable = [
        'name',
        'uuid',
        'email',
        'teams',
        'katagaki',
        'tag',
        'created_at',
        'updated_at'
    ];

SeederでFactoryを使用する

database/seeders/DatabaseSeeder.php

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     *
     * @return void
     */
    public function run()
    {
        App\Models\TargetUser::factory(10)->create();

    }
}

Seederを実行して、実際にデータが登録されるか確認します。

php artisan db:seed

コメント