>백엔드 개발 >PHP 튜토리얼 >Eloquent 모델에 사용자 정의 속성을 어떻게 추가할 수 있나요?

Eloquent 모델에 사용자 정의 속성을 어떻게 추가할 수 있나요?

Patricia Arquette
Patricia Arquette원래의
2024-10-30 03:38:02764검색

How Can I Add Custom Attributes to Eloquent Models?

Eloquent 모델에 사용자 정의 속성 추가

사용자 정의 속성으로 Laravel/Eloquent 모델을 보강하는 기능은 모델 표현을 향상하는 데 필수적입니다. 기본적으로 모델은 테이블 열에 해당하는 속성을 노출합니다. 그러나 데이터베이스를 쿼리하지 않고 추가 데이터나 계산에 액세스하는 것이 바람직한 경우가 많습니다.

한 가지 과제는 모델이 로드될 때 사용자 정의 속성을 채우는 것입니다. 기본 toArray() 메서드는 테이블 열에 직접 매핑되지 않는 접근자를 제외합니다. 이 제한을 극복하려면:

Laravel 버전 >= 8:

getter 함수와 함께 Attribute 클래스를 사용하세요. 이를 통해 테이블 ​​열과 직접적인 관련이 없는 사용자 정의 속성을 정의할 수 있습니다.

<code class="php">class EventSession extends Eloquent {
    ...
    public function availability()
    {
        return new Attribute(
            get: fn () => $this->calculateAvailability()
        );
    }
    ...
}</code>

Laravel 버전 < 8:

두 가지 옵션을 사용할 수 있습니다.

옵션 1: 명시적 속성 설정

toArray() 메서드를 재정의하고 수동으로 할당 사용자 정의 속성.

<code class="php">class Book extends Eloquent {
    ...
    public function toArray()
    {
        $array = parent::toArray();
        $array['upper'] = $this->upper;
        return $array;
    }
    
    public function getUpperAttribute()
    {
        return strtoupper($this->title);
    }
    ...
}<p><strong>옵션 2: 사용자 정의 접근자를 통한 루프</strong></p>
<p>변경된 모든 속성을 반복하고 이를 배열 표현에 적용합니다.</p>
<pre class="brush:php;toolbar:false"><code class="php">class Book extends Eloquent {
    ...
    public function toArray()
    {
        $array = parent::toArray();
        foreach ($this->getMutatedAttributes() as $key)
        {
            if (! array_key_exists($key, $array)) {
                $array[$key] = $this->{$key};
            }
        }
        return $array;
    }
    ...
}</code>

이러한 기술을 활용하여 개발자는 사용자 정의 속성으로 Eloquent 모델을 강화하여 표현을 풍부하게 하고 애플리케이션 기능을 강화할 수 있습니다.

위 내용은 Eloquent 모델에 사용자 정의 속성을 어떻게 추가할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.