[Laravel8] Factory 사용법 메모

Laravel8에서 테스트 데이터를 넣고 싶을 때의 Factory 사용법 메모입니다.
환경: XAMPP for Windows, Laravel Framework 8.6.0

☞ 이번 케이스 ☜
· 예를 들어, Twitter의 클론 앱을 만들고 있어 트윗을 관리하는 테이블에 테스트 데이터를 넣고 싶을 때.
마이그레이션 파일은 이런 느낌. ↓↓ 데이터를 넣고 싶은 것은 'user_id'와 'body'의 2개만.

database\migrations\2020_09_28_045814_create_tweets_table.php
    public function up()
    {
        Schema::create('tweets', function (Blueprint $table) {
            $table->id();
            $table->foreignId('user_id');
            $table->string('body');
            $table->timestamps();
        });
    }

절차 1. 터미널에서 다음 명령을 사용하여 TwitterFactory.php를 만듭니다.
・database\factories\TweetFactory.php 에 파일을 할 수 있습니다!
php artisan make:factory TweetFactory --model=Tweet

순서 2. Laravel8이 되고 나서, global인 factory() 함수는 삭제되었습니다. 그 때문에, 모델의 Factory 클래스를 사용합니다.
해당 모델 파일에 'Illuminate\Database\Eloquent\Factories\HasFactory'가 가져왔는지 확인한다.

\app\Models\Tweet.php
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory; // ←ここ確認。
use Illuminate\Database\Eloquent\Model;

class Tweet extends Model
{
    use HasFactory;
}

3단계: 만든 TweetFactory.php를 편집합니다.
· 연동할 모델을 가져오고 있는지 확인하고 return[] 부분을 추가합니다.

database\factories\TweetFactory.php
<?php

namespace Database\Factories;

use App\Models\Tweet; //←モデルがインポートされているかを確認!
use App\Models\User; //←モデルがインポートされているかを確認!
use Illuminate\Database\Eloquent\Factories\Factory;

class TweetFactory extends Factory
{
    /**
     * The name of the factory's corresponding model.
     *
     * @var string
     */
    protected $model = Tweet::class;

    /**
     * Define the model's default state.
     *
     * @return array
     */
    public function definition()
    {
        return [
            'user_id' => User::factory(), //←ここ追記
            'body' => $this->faker->sentence //←ここ追記
        ];
    }
}

절차 4. DatabaseSeeder.php에 추가한다.

database\seeders\DatabaseSeeder.php
<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;

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

순서 5. seed를 실행합니다.
터미널에서 다음 명령을 실행합니다.
php artisan db:seed

이상으로 해당 테이블에 테스트 데이터가 들어갑니다.
users 테이블에도 데이터가 들어간다. .


tweets 테이블에도 데이터가 들어 있다!


테스트 데이터를 일본어로 만들려면 config/app.php의 'faker_locale'을 다음과 같이 수정하십시오.

config/app.php
'faker_locale' => 'ja_JP', 

이상입니다.

*덧붙여 위의 순서는 teams 옵션을 추가하지 않은 경우입니다. teams 옵션을 유효하게 해 Jetstream을 인스톨 하고 있는 경우는, 이하의 참고 사이트씨로 알기 쉽게 설명 받고 있었으므로, 참고에!

참고 사이트:
htps : // bg. 카피의 fw. 이 m/? p = 7827 # 후 c와 ry

좋은 웹페이지 즐겨찾기