본문 바로가기
Laravel

[Laravel 라라벨] Eloquent - attribute, method 접근

by bartizan_ 2025. 1. 29.
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)입니다. 데이터베이스와의 상호작용을 객체로 추상화하여 보다 직관적이고 편리하게 데이터를 관리할 수 있도록 해줍니다.

주요 특징

  1. 테이블과 클래스 매핑:
    • 데이터베이스의 각 테이블은 Eloquent 모델 클래스와 매핑됩니다.
    • 각 레코드는 모델 클래스의 인스턴스로 표현됩니다.
  2. 편리한 CRUD 지원:
    • create, read, update, delete를 간단한 메서드 호출로 구현할 수 있습니다.
    • 예: User::find(1), $user->save(), $user->delete().
  3. Eloquent 관계:
    • 테이블 간의 관계(1:1, 1:N, N:N 등)를 객체로 매핑.
    • 관계 정의: hasOne, belongsTo, hasMany, belongsToMany.
  4. 속성 변환과 접근자/설정자:
    • 데이터베이스의 값을 포맷팅하거나 가공된 값을 반환하는 데 유용.

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

댓글