우리가 프로젝트를 진행하다보면 유의미한 테스트용 데이터를 db에 입력해야하는데 그걸 일일이 손수 입력하면 시간낭비이기도하고 여간 귀찮은 작업이 아니다. 하지만 laravel에서는 이 기능을 지원하는데
https://laravel.kr/docs/8.x/database-testing
라라벨 8.x - 데이터베이스
라라벨 한글 메뉴얼 8.x - 데이터베이스
laravel.kr
https://laravel.kr/docs/8.x/seeding
라라벨 8.x - Seeding-시딩
라라벨 한글 메뉴얼 8.x - Seeding-시딩
laravel.kr
이 부분을 참고해서 구현했다 간단하게 factory에서 기능을 작성하고 seeder부분에서 이 기능을 몇번 돌릴건지 테스트할건지 db에 입력할건지 등등 옵션?을 넣어주고 artisan명령어로 실행해준다
php artisan db:seed로 실행할수 있고 일정 seed만 실행할거면 php artisan db:seed --class=PostSeeder 로 골라서 작동시켜줄 수 있다 factory부분에서는 faker php 라이브러리를 사용하고
<?php
namespace Database\Factories;
use Illuminate\Database\Eloquent\Factories\Factory;
use App\Models\Post;
use Illuminate\Support\Str;
class PostFactory extends Factory
{
/**
* The name of the factory's corresponding model.
*
* @var string
*/
protected $model = Post::class;
/**
* Define the model's default state.
*
* @return array
*/
public function definition()
{
return [
'title' => $this->faker->realText(30),
'writer' => $this->faker->realText(10),
'content' => $this->faker->realText(),
'created_at' => $this->faker->dateTimeBetween('-2 years', 'now'),
];
}
}
나는 이런식으로 구현하였다 이렇게 factory를 작성하고 seeder에서
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use App\Models\Post;
class PostSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
Post::factory()
->count(20)
->create();
}
}
이렇게 작성하고 artisan명령어로 실행하면 db에 입력되게 된다 위에 코드같은경우는 20번 실행해서 db에 입력하는 경우고 create()가 아니라 make()로 작성하면 db에는 입력되지않고 어떻게 나오는지 테스트할수있게 된다고한다
실제로 db에 입력되면

이런 형식으로 입력된다 seeder기능덕에 테스트 데이터가 쉽게 작성되어서 좀 편했던거같다
'개발지식 > PHP' 카테고리의 다른 글
| [Laravel] laravel ajax사용시 주의할점 (0) | 2022.02.22 |
|---|---|
| [Laravel] laravel Scout을 이용한 검색(Algolia 연동) (0) | 2022.02.07 |
| [Laravel] laravel 스케줄러 만들기 (0) | 2022.01.25 |
| [Laravel] 라라벨 이메일 보내기 (0) | 2022.01.21 |
| [Laravel] laravel jetstream 이메일 인증 커스터마이징 (0) | 2022.01.18 |