728x90
Laravel 을 사용하면서 조금 헷갈렸던 개념에 대해 정리해보겠습니다.
1. 속성처럼 접근하는 것과 메서드처럼 접근하는 것의 차이
속성처럼 접근
Laravel에서 속성처럼 접근할 때는 모델의 속성(attribute) 또는 Attribute 접근자를 통해 값을 가져옵니다.
- 속성(Attribute): 데이터베이스 테이블의 컬럼과 직접적으로 매핑됩니다. 예: id, name.
- Attribute 접근자: 추가적인 로직을 통해 계산된 값을 반환하는 커스텀 속성입니다. getAttribute 메서드를 통해 호출됩니다.
사용법:
$snapshot = Snapshot::find(1);
// 속성 접근
$done = $snapshot->done; // 데이터베이스 컬럼 `done`의 값을 가져옴
$unopened = $snapshot->unopened; // Attribute 접근자 사용
메서드처럼 접근
메서드처럼 접근하는 경우는 모델에 정의된 사용자 정의 메서드 또는 Eloquent 관계(Relation)를 호출하는 것입니다.
- 사용자 정의 메서드: 모델에서 사용자가 정의한 메서드로, 특정 작업이나 연산을 수행합니다.
- Eloquent 관계(Relation): hasOne, belongsTo, hasMany 등 관계 정의에 사용됩니다.
사용법:
$snapshot = Snapshot::find(1);
// 메서드 접근
$therapist = $snapshot->therapist(); // Eloquent 관계를 메서드로 호출
2. 구별 방법
1) 속성처럼 접근
- getAttribute 메서드를 통해 값이 반환됩니다.
- 데이터베이스 컬럼과 매핑된 속성이나 Attribute 접근자를 참조합니다.
- 구현 방식: protected function 속성명(): Attribute.
protected function unopened(): Attribute
{
return Attribute::make(
get: fn() => $this->member_count - $this->done - $this->processing,
);
}
접근:
$snapshot->unopened; // 속성처럼 접근
2) 메서드처럼 접근
- 함수 호출(())로 동작합니다.
- 사용자 정의 메서드 또는 Eloquent 관계에서 사용됩니다.
- 구현 방식: 일반 메서드 정의(public function 이름()).
public function therapist(): BelongsTo
{
return $this->belongsTo(Therapist::class);
}
접근:
$snapshot->therapist(); // 메서드처럼 접근
3. Eloquent 모델이란
Eloquent는 Laravel의 ORM(Object Relational Mapping)입니다. 데이터베이스와의 상호작용을 객체로 추상화하여 보다 직관적이고 편리하게 데이터를 관리할 수 있도록 해줍니다.
주요 특징
- 테이블과 클래스 매핑:
- 데이터베이스의 각 테이블은 Eloquent 모델 클래스와 매핑됩니다.
- 각 레코드는 모델 클래스의 인스턴스로 표현됩니다.
- 편리한 CRUD 지원:
- create, read, update, delete를 간단한 메서드 호출로 구현할 수 있습니다.
- 예: User::find(1), $user->save(), $user->delete().
- Eloquent 관계:
- 테이블 간의 관계(1:1, 1:N, N:N 등)를 객체로 매핑.
- 관계 정의: hasOne, belongsTo, hasMany, belongsToMany.
- 속성 변환과 접근자/설정자:
- 데이터베이스의 값을 포맷팅하거나 가공된 값을 반환하는 데 유용.
Eloquent 예제
class User extends Model
{
// 테이블과 매핑된 기본 Eloquent 모델
// 1:1 관계 정의
public function profile()
{
return $this->hasOne(Profile::class);
}
// 속성 접근자
protected function fullName(): Attribute
{
return Attribute::make(
get: fn() => $this->first_name . ' ' . $this->last_name,
);
}
}
// 사용법
$user = User::find(1);
echo $user->fullName; // 접근자 사용
$profile = $user->profile; // 관계 사용
요약
- 속성처럼 접근: Attribute 접근자나 데이터베이스 컬럼을 다룹니다.
- 메서드처럼 접근: Eloquent 관계나 사용자 정의 메서드를 호출합니다.
- Eloquent 모델은 데이터베이스와 객체 간의 매핑을 도와주는 Laravel ORM입니다. CRUD와 관계 정의를 쉽게 구현할 수 있습니다.
728x90
'Laravel' 카테고리의 다른 글
[Laravel & AWS] Laravel에서 AWS Bedrock 적용하기 - 생성형 AI 실전 연동 가이드 (0) | 2025.02.19 |
---|---|
[Laravel 라라벨] 테이블 간 관계에서 외래 키를 명시해야하는 이유 (0) | 2025.02.06 |
[Laravel 라라벨] Morph() 다형성 (0) | 2025.01.27 |
[Laravel] 환경설정 (1) | 2025.01.26 |
댓글