[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
Reference
이 문제에 관하여([Laravel8] Factory 사용법 메모), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Tomochan_taco/items/3d6574438eeb79bf7f29텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)