$attributes 는 Model 에서 라라벨의 필드를 담는 배열 변수이다. 보통 $attributes 를 통해 Model 필드에 접근 하는건 Mutator 나 cast 같은 내부 메소드를 통해 접근할때 일것이다.
ex)
use App\Support\Address;
use Illuminate\Database\Eloquent\Casts\Attribute;
/**
* Interact with the user's address.
*
* @return \Illuminate\Database\Eloquent\Casts\Attribute
*/
protected function address(): Attribute
{
return Attribute::make(
get: fn ($value, $attributes) => new Address(
$attributes['address_line_one'],
$attributes['address_line_two'],
),
);
}
이 $attributes 는 라라벨에서 제공해주는 Model class 에 trait 로 불러와진다.
Illuminate\Database\Eloquent\Concerns\HasAttributes
코드리뷰시 모델에서 $attributes 필드에 바로 접근하는 코드를 보게되어 이렇게 접근을 해도 괜찮은건지 확인을 하게 됐었는데 결론은 모델에서 $attributes 필드에 바로 접근시 초기 값인 빈 배열을 반환한다.
$user = new User();
$user->attributes['foo']; // $user->attributes 는 빈 배열
그래서 모델에서 필드값을 호출 하고 싶다면 HasAttributes trait 가 제공해주는 getAttributes() 를 사용하도록 하자. getAttributes() 는 배열에 각 필드값을 맵핑하여 반환해준다.
/**
* Get all of the current attributes on the model.
*
* @return array
*/
public function getAttributes()
{
$this->mergeAttributesFromCachedCasts(); // $attributes 에 필드값을 맵핑 해준다
return $this->attributes;
}
그리고 참고로 mutator 에서 호출 하는 $attributes 에 값이 맵핑되어 있는 이유는 HasAttributes trait 의 setAttribute 메소드를 살펴보면 Mutator 메소드인 경우 $attributes 을 맵핑해준다.
'IT > 라라벨' 카테고리의 다른 글
[Laravel] passport 인증 실패 익셉션 발생시 Authoization header 를 날림 (0) | 2023.09.30 |
---|---|
[laravel] 다대다 관계 pivot 테이블 컬럼 업데이트 (0) | 2023.03.05 |
[laravel] 라라벨 테스트 코드 작성 하기 전 알아두면 좋은 것 (0) | 2022.12.25 |
[laravel] SPA 웹 어플리케이션에서 csrf_token 을 사용할때 발생할수 있는 이슈 CSRF token mismatch (0) | 2022.12.22 |
[라라벨] laravel 설치 명령어 에러 해결방법 (0) | 2020.11.14 |