관리 메뉴

java,javascript,android,php,sql,공부용,메모용

라라벨11 - Laravel Factory, Farker 사용방법 본문

개발/php

라라벨11 - Laravel Factory, Farker 사용방법

yy_dd2 2026. 3. 19. 17:53
반응형

Laravel Factory 완전 정리 (생성 흐름 + 오류 해결)


🚀 시작 전 (Laravel Sail 실행)

Laravel 작업을 시작하기 전에 항상 아래 명령어로 환경을 실행합니다.

cd ~/documents/laravel/laravel_docker/sample

alias sail="./vendor/bin/sail"

sail up -d

👉 Docker 기반 Laravel 환경 실행
👉 이후 모든 artisan 명령어는 sail을 사용해서 실행


📌 1. 모델 클래스 만들기

✔ 모델만 생성

sail artisan make:model Publisher

👉 생성 파일:

app/Models/Publisher.php

👉 이 방법은 모델만 생성되며
Factory, Migration은 따로 만들어야 합니다


📌 2. Factory 클래스 만들기 + 데이터 정의

✔ Factory 생성

sail artisan make:factory PublisherFactory

👉 생성 파일:

database/factories/PublisherFactory.php

✔ 데이터 투입 처리 작성

public function definition(): array
{
    return [
        'name' => $this->faker->company . ' Pub.',
        'isbn' => $this->faker->isbn13(),
        'address' => $this->faker->address,
        'created_at' => now(),
        'updated_at' => now(),
    ];
}

👉 DB 컬럼과 동일하게 작성해야 함


📌 3. 모델 + Factory 한 번에 생성하는 방법

sail artisan make:model Publisher -mf

👉 한 번에 생성됨:

  • Model
  • Migration
  • Factory

✔ 장점

  • HasFactory 자동 포함
  • 파일 간 연결 실수 방지
  • 실무에서 가장 많이 사용하는 방식

📌 4. DatabaseSeeder에서 Factory 호출

파일:

database/seeders/DatabaseSeeder.php
\App\Models\Publisher::factory()->count(10)->create();

📌 실행 방법

sail artisan migrate:fresh --seed

👉 DB 초기화 + 데이터 생성

 


❗ 오류가 발생하는 이유 (점검 포인트)

1️⃣ 모델과 Factory 연결 안 됨

use Illuminate\Database\Eloquent\Factories\HasFactory;

class Publisher extends Model
{
    use HasFactory;
}

👉 이 설정이 없으면 Factory 사용 불가


2️⃣ DB 컬럼과 Factory 데이터 불일치

👉 예:

  • DB에는 있는데 Factory에 없음
  • Factory에는 있는데 DB에 없음

👉 대표 오류:

Unknown column 'name'

3️⃣ 캐시 문제

👉 코드 수정했는데도 이전 코드 기준으로 동작할 때 발생

✔ 이런 상황에서 사용

  • 코드 수정했는데 동일 오류 반복
  • 분명히 고쳤는데 반영 안 됨

✔ 해결 명령어

sail artisan optimize:clear

💡 팁

✔ 팁 1. 생성은 가능하면 한 번에

sail artisan make:model XXX -mf

👉 연결 문제 예방


✔ 팁 2. Factory 작성 전에 DB 구조 확인

DESC 테이블명;

👉 컬럼 기준으로 작성하면 오류 감소


✔ 팁 3. 데이터 확인은 세로 출력

SELECT * FROM publishers\G

👉 긴 데이터 확인에 유용


🚀 한 줄 핵심

Factory는
Model + Factory + DB 구조가 정확히 맞아야 정상 동작한다


📌 Faker 사용 가능한 주요 기능 정리

이름(속성/함수)코드 예시설명
name 'name' => $this->faker->name 사람 이름
firstName 'first_name' => $this->faker->firstName 이름
lastName 'last_name' => $this->faker->lastName
userName 'username' => $this->faker->userName 아이디
email 'email' => $this->faker->email 이메일
safeEmail 'email' => $this->faker->safeEmail 안전한 이메일 (테스트용)
password 'password' => bcrypt('1234') 비밀번호 (faker 없음, 직접 설정)
phoneNumber 'phone' => $this->faker->phoneNumber 전화번호
address 'address' => $this->faker->address 전체 주소
city 'city' => $this->faker->city 도시
postcode 'postcode' => $this->faker->postcode 우편번호
country 'country' => $this->faker->country 국가
company 'company' => $this->faker->company 회사명
jobTitle 'job' => $this->faker->jobTitle 직업
sentence 'title' => $this->faker->sentence 한 문장
text 'content' => $this->faker->text 긴 글
word 'word' => $this->faker->word 단어
randomNumber 'num' => $this->faker->randomNumber() 랜덤 숫자
numberBetween 'num' => $this->faker->numberBetween(1, 100) 범위 숫자
randomFloat 'price' => $this->faker->randomFloat(2, 1000, 50000) 소수점 숫자
date 'date' => $this->faker->date() 날짜
dateTime 'created_at' => $this->faker->dateTime() 날짜 + 시간
boolean 'is_active' => $this->faker->boolean true / false
uuid 'uuid' => $this->faker->uuid 고유 ID
url 'url' => $this->faker->url 웹사이트 주소
ipv4 'ip' => $this->faker->ipv4 IP 주소
imageUrl 'image' => $this->faker->imageUrl() 이미지 URL
isbn10 'isbn' => $this->faker->isbn10() 10자리 ISBN
isbn13 'isbn' => $this->faker->isbn13() 13자리 ISBN

📌 사용법 핵심

✔ 기본 구조

 
return [
'컬럼명' => $this->faker->기능
];
 

✔ 함수 vs 속성 차이

타입예시
속성 $this->faker->name
함수 $this->faker->numberBetween(1, 100)

📌 실전 예시 (조합)

 
return [
'name' => $this->faker->name,
'email' => $this->faker->unique()->safeEmail,
'phone' => $this->faker->phoneNumber,
'address' => $this->faker->address,
'price' => $this->faker->randomFloat(2, 1000, 50000),
'isbn' => $this->faker->isbn13(),
];
 

🚀 한 줄 핵심

👉 Faker는
👉 “컬럼에 맞는 현실적인 데이터를 자동으로 넣어주는 도구”


 

📌 해결 방법 1 (추천 ⭐)

👉 세로 출력 사용

 
SELECT * FROM publishers\G
 

👉 ; 대신 \G 사용


🔍 결과 느낌

❌ 기본 (가로)

| id | name | isbn | address | created_at | ...
 

👉 너무 길어서 깨짐


⭕ \G 사용 (세로)

*************************** 1. row ***************************
id: 1
name: ABC Pub.
isbn: 9781234567890
address: 서울...
created_at: ...
 

👉 훨씬 보기 편함 👍


📌 해결 방법 2

👉 컬럼 줄이기

 
SELECT id, name FROM publishers;
 

👉 필요한 것만 보기


📌 해결 방법 3

👉 테이블 구조 확인

 
DESC publishers;
 

👉 컬럼 구조만 깔끔하게 확인


📌 해결 방법 4 (꿀팁)

👉 MySQL 출력 폭 조절

터미널 넓히기 (창 늘리기)

👉 이게 의외로 중요함


📌 추천 사용 패턴

 
SELECT * FROM publishers\G
 

👉 데이터 확인할 때 무조건 이거 추천


🚀 한 줄 핵심

👉 MySQL 보기 불편하면
👉 ; 말고 \G 써라


 
 
 
 

 

반응형
Comments