>백엔드 개발 >PHP 튜토리얼 >로드 시 Laravel/Eloquent 모델에 사용자 정의 속성을 추가하는 방법은 무엇입니까?

로드 시 Laravel/Eloquent 모델에 사용자 정의 속성을 추가하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-04 13:15:29505검색

How to Add a Custom Attribute to a Laravel/Eloquent Model on Load?

로드 시 Laravel/Eloquent 모델에 사용자 정의 속성 추가

문제 분석

Laravel/Eloquent에서 사용자 정의 속성은 모델을 toArray() 또는 JSON 형식으로 변환할 때 기본 테이블의 열은 제외됩니다.

해결책

Laravel 8 이상:

객체가 로드될 때 속성을 자동으로 계산하고 할당하는 사용자 정의 접근자를 생성하는 속성 클래스.

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

Laravel 7 이하:

옵션 1 : $appends 속성에 속성 추가

$appends 배열에 사용자 정의 속성을 추가하고 적절한 접근자를 정의합니다.

<code class="php">class EventSession extends Eloquent {
  protected $appends = ['availability'];
  public function getAvailabilityAttribute() {
    return $this->calculateAvailability();
  }
}</code>

옵션 2: toArray() 재정의 메서드

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);
  }
}</code>

옵션 3: 변경된 속성을 통한 루프

모델의 변경된 속성을 반복하여 toArray() 배열에 적용합니다.

<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;
  }
  public function getUpperAttribute() {
    return strtoupper($this->title);
  }
}</code>

위 내용은 로드 시 Laravel/Eloquent 모델에 사용자 정의 속성을 추가하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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