일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 맛집
- 업비트
- Laravel
- 프레임워크
- 옵티머스 g
- 20.04
- 옵G
- php
- 코드이그나이터
- 라즈비안
- Selenium
- Ubuntu 20.04
- 셀레니움
- TiL
- 제주도
- 옵지
- 맥
- FMS
- Raspberry Pi
- ubuntu
- 우분투 20.04
- C
- 옵티머스g
- 회고
- 라즈베리파이
- 우분투
- 라라벨
- upbit
- codeigniter
- MySQL
- Today
- Total
평범한 이야기들
[TIL] PHP Laravel - Database #2 시딩 (Seeding) 본문
시딩
프로그램에서 테스트 할 수 있는 임시의 데이터를 생성하는 기능
시딩 작업을 하기 위한 기본 파일로 database/seeders 디렉터리에 run() 메서드를 갖는 DatabaseSeeder 클래스가 있음
(라라벨 버전이 8 이하면 database/seeds 디렉토리 이며 시더 파일도 네임스페이스가 정해져 있지 않음)
// 마이그레이션 진행시 시딩도 같이 할 경우
~ php artisan migrate --seed
~ php artisan migrate:refresh --seed
// 시딩을 독립적으로 실행
~ php artisan db:seed
//시딩을 수행할 개별 클래스 지정
~ php artisan db:seed --class=VotesTableSeeder
시더 생성
~ php artisan make:seed ContactsTableSeeder
database/seeders 디렉터리에 ContactsTableSeeder 클래스 파일 생성
DatabaseSeeder 클래스의 run() 메서드에서 새롭게 생성한 시더를 호출하도록 내용을 추가해주어야 함
// database/seeders/DatabaseSeeder.php
...
public function run()
{
$this->call(ContactsTableSeeder::class);
}
그 후 ContactsTableSeeder 클래스에 내용을 추가한다.
// database/seeders/ContactsTableSeeder.php
// 시더를 통해 하나의 레코드 추가
...
public function run()
{
DB::table('contacts')->insert([
'name' => '홍길동',
'email' => 'hong@gmail.com'
]);
}
...
이렇게 하면 하나의 데이터만 들어가기 때문에 불편, 라라벨에서는 랜덤한 데이터를 반복적으로 넣는 기능 제공
라라벨8 버전의 모델 팩토리
모델 팩토리 기능은 데이터베이스 테이블에 가짜 데이터를 채워 넣는 데 사용
각각의 팩토리를 정의할 때는 팩토리를 통해서 생성하고자 하는 엘로퀀트 모델 클래스명을 사용
<?php
// 엘로퀀트와 테이블명을 키로 하는 모델 팩토리 정의
namespace Database\Factories;
use App\Models\Post;
use Illuminate\Database\Eloquent\Factories\Factory;
class UserFactory extends Factory
{
protected $model = User::class;
public function definition()
{
return[
'name'=> $this->faker->name
];
}
}
모델 팩토리 생성
~ php artisan make:factory ContactFactory --model=Contact
database/factories 디렉터리에 ContactFactory.php 클래스 파일 생성
시딩을 처리하거나 테스트를 수행하기 위해서 factory() 메서드를 사용해 새로운 Contact 인스턴스를 생성 할 수 있음
user App\Models\Contact;
// 1개 생성
$contact = Contact::factory()->create();
// 여러개 생성 (Collection이 반환)
$contact = Contact::factory()->count(20)->create();
하지만 이렇게 하면 동일한 내용이 20개가 생김
이를 위해 페이커 기능을 사용 모든 팩토리 클래스에서 사용할 수 있게 $this→faker
와 같이 접근 가능
public function definition()
{
return [
'name' => $this->faker->name,
'email' => $this->faker->email,
];
}
→ 모델팩토리는 테스팅에서 더 많이 사용하기 때문에 그 후 다시 공부
라라벨 8 이전 버전의 모델팩토리 제외