"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Laravel Eloquent 모델이로드 될 때 사용자 정의 속성을 추가하는 방법은 무엇입니까?

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

2025-04-15에 게시되었습니다
검색:299

How to Add Custom Attributes to Laravel Eloquent Models on Load?

public function index () { $ sessions = eventsession :: all (); foreach ($ sessions as $ i => $ session) { $ sessions [$ i]-> available = $ session-> getAvailability (); } 반품 $ 세션; } 수동 루프를 건너 뛰고 '사용 가능한'속성을 자동으로 채우는 것이 편리합니다. 이것은 성능 이유에 대한 의도적 인 디자인입니다.

솔루션
public function index()
{
    $sessions = EventSession::all();
    foreach ($sessions as $i => $session) {
        $sessions[$i]->available = $session->getAvailability();
    }
    return $sessions;
}

classe extendestestions는 우아한 방법이 있습니다. 보호 된 $ table = '세션'; 공개 기능 가용성 () { 새로운 속성 반환 ( get : fn () => $ this-> calculateavailability () ); } }

class EventSession extends Eloquent {

    protected $table = 'sessions';

    public function availability()
    {
        return new Attribute(
            get: fn () => $this->calculateAvailability()
        );  
    }
}

public function index()
{
    $sessions = EventSession::all();
    foreach ($sessions as $i => $session) {
        $sessions[$i]->available = $session->getAvailability();
    }
    return $sessions;
}

8보다 컨트롤을 사용할 수 있습니다. 웅변 { 보호 된 $ table = '세션'; Protected $ appleds = array ( '가용성'); 공개 함수 getAvailabilityAttribute () { return $ this-> calculateavailability (); } }

옵션 2 : toarray () 메소드

public function index()
{
    $sessions = EventSession::all();
    foreach ($sessions as $i => $session) {
        $sessions[$i]->available = $session->getAvailability();
    }
    return $sessions;
}

대안으로 ToArray () 메소드를 무시하고 속성을 수동으로 설정할 수 있습니다. 보호 된 $ table = 'books'; 공개 기능 toArray () { $ array = parent :: toArray (); $ array = $ this-> 상단; 반환 $ 배열; } 공개 기능 getupperattribute () { return strtoupper ($ this-> title); } }

= $ this-> {$ key}; } } 반환 $ 배열; } 공개 기능 getupperattribute () { return strtoupper ($ this-> title); } }

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3