Laravel의 데이터베이스 시딩

Ep#27@Laracasts: 데이터베이스 시딩으로 시간 절약

이 게시물은 시리즈의 일부입니다. 우리는 Laracasts의 Scratch 시리즈에서 Laravel 8을 따라 도전하면서 Blog project을 빌드하고 있습니다.

개발 중에 우리는 종종 php artisan migrate:fresh 명령을 실행하여 데이터베이스를 새로 고치고 스키마에 대한 변경 사항을 적용합니다. 이 명령은 데이터베이스에서 모든 데이터를 삭제합니다. 데이터를 수동으로 계속해서 데이터베이스에 다시 쓰는 것은 매우 번거롭습니다. Laravel은 Database seeder의 형태로 이 문제에 대한 매우 편리한 솔루션을 제공합니다.

데이터베이스 시더는 데이터베이스 테이블에 대한 레코드 생성을 담당하는 PHP 클래스입니다. 이러한 시더 클래스는 databases/seeders 디렉토리에 저장됩니다. 이 디렉토리에는 기본적으로 파일DatabaseSeeder.php에 시드 클래스가 있습니다. 이 클래스를 검사하면 내부에 코드가 있는 메서드run()가 있습니다.

// \App\Models\User::factory(10)->create();


이 코드에는 아직 익숙하지 않은 메서드factory()가 있습니다. 그러나 이 코드는 users 테이블에 대해 10개의 레코드를 생성하는 것처럼 들립니다. 문제는 이 코드를 실행하는 방법입니다. Laravel에는 이에 대한 명령php artisan db:seed이 있습니다.

먼저 seeder 클래스에서 해당 줄의 주석 처리를 제거한 다음 php artisan db:seed 명령을 실행합니다. 이제 users 테이블에 10개의 레코드가 있는 것을 볼 수 있습니다. 명령을 다시 실행하면 이전 레코드를 삭제하지 않고 10개의 레코드가 더 추가됩니다. 이를 방지하기 위해 새 데이터를 쓰기 전에 테이블을 비울 수 있습니다. 사용자를 생성하는 코드 앞에 이 줄User::truncate();을 작성합니다.

\App\Models\User::truncate();
\App\Models\User::factory(10)->create();


새로 고침 명령 끝에 --seed 옵션을 추가하여 데이터베이스를 새로 고친 직후에 시드할 수 있습니다.

php artisan migrate:fresh --seed


참고: 이 게시물은 Blog Project 에 대한 자세한 내용으로 곧 업데이트됩니다.

좋은 웹페이지 즐겨찾기