728x90
🚨 코딩하다 의문점이 생겼는데요.
public function a(): BelongsTo
{
return $this->belongsTo(A::class, 'specific_id');
}
위처럼 무언가를 정의해줘야할 때가 있더라고요? 아니면 PK 를 제대로 찾지 못하는 이슈가 발생을 했습니다.
냅다 알아보았는데요.
1. 원인 분석
- 처음에 문제가 발생했던 이유는 Laravel이 A 테이블에서 기본적으로 user_id를 외래 키로 예상했기 때문입니다.
- Laravel의 기본 규칙: hasMany()나 belongsTo() 관계에서는 현재 모델의 기본 키와 snake_case 형태로 된 외래 키를 자동으로 매핑합니다.
- 즉, 기본적으로 user_id 컬럼을 찾으려 하다가, 해당 컬럼이 없어서 Unknown column 'user_id' 오류가 발생한 것입니다.
2. 왜 외래 키를 명시하면 해결되는가
return $this->hasMany(A::class, 'specific_id');
- therapist_id를 명시함으로써, Eloquent은 A 테이블에서 외래 키로 specific_id 컬럼을 사용하도록 지시합니다.
- 이제 Laravel은 specific_id를 기준으로 테이블을 조인하여 데이터를 올바르게 가져올 수 있습니다.
3. 관계의 동작 방식
- hasMany() 메서드는 기본적으로 다음과 같은 쿼리를 생성합니다:
SELECT * FROM A WHERE specific_id = ?
- 외래 키를 명시하지 않으면 기본적으로 아래와 같은 쿼리를 생성하려고 시도합니다:
SELECT * FROM A WHERE user_id = ?
- 테이블에 specific_id가 없기 때문에 오류가 발생한 것이죠.
4. 요약
- Laravel에서는 테이블 간 관계에서 외래 키를 명시해야만 Eloquent가 올바른 키를 사용하여 데이터를 가져올 수 있습니다.
- 명시하지 않으면 모델명에 따른 기본 규칙(specific_id)에 따라 키를 찾기 때문에 오류가 발생할 수 있습니다.
- 따라서 외래 키가 기본 규칙과 다르다면 반드시 관계 정의에서 두 번째 인자로 외래 키를 설정해주어야 합니다.
보편적인 FK가 아닌 경우엔 정확히 명시를 해주어야 한다!
728x90
'Laravel' 카테고리의 다른 글
[Laravel & AWS] Laravel에서 AWS Bedrock 적용하기 - 생성형 AI 실전 연동 가이드 (0) | 2025.02.19 |
---|---|
[Laravel 라라벨] Eloquent - attribute, method 접근 (0) | 2025.01.29 |
[Laravel 라라벨] Morph() 다형성 (0) | 2025.01.27 |
[Laravel] 환경설정 (1) | 2025.01.26 |
댓글