2016-11-12 4 views
4

laravel 및 protected $ 속성 및 mutators에 문제가 있습니다.Laravel 보호 속성 및 뮤 테이터

나는 사용자 점수가 있습니다. 나는 사용자 모델에 순위 순위가있는 다른 속성을 추가하려고합니다. 나는 또한 설정

public function getRankPositionAttribute(){ 
    $userPoints= Ranking::where('user_id','=',$this->id)->first(); 
    $userPosition = Ranking::where('points','>',$userPoints->points)->count()+1; 
    return $userPosition; 
    } 

: 사용자 모델에서

나는이 같은 공공 기능이

protected $attributes = array('RankPosition'=''); 

을하지만 (내가 속성에서 RankPosition 같은 값을 표시되지 않습니다) 작동하지 않습니다. 이상한 것은이 같은 (예를 들어) 값을 추가 할 때이다 :

protected $attributes =array('test'=>'yes'); 

Laravel도 ... 시험

표시되지 않습니다하지만 추가 할 때이 :

protected $appends = array('RankPosition'); 

및 내 컨트롤러에서 모든 사용자를 찾고 json에 대한 응답을 얻은 다음 json 응답에서 올바른 값으로 RankPosition과 같은 값을 봅니다. ... : (

"내 laravel"이 보호 된 $ 속성을 건너 뛴 이유는 무엇입니까?

도와주세요.

+0

Laravel mutators는 마법의 방법입니다. 'Model :: $ attributes' 속성에 mutator가 보이지 않습니다. – Skysplit

답변

2

클래스에 protected $attributes을 입력하면 Laravel은 속성 원본이 테이블 인 경우이를 무시하지 않기 때문입니다. 여기서 $attributes의 소스는 데이터베이스 컬럼입니다.

그러나 당신이 뭔가를 할 때

$user = new User; 

는 당신은 test 속성을 볼 수 있습니다.

동적으로 속성을 추가하려면 모델에 appends 속성을 사용해야합니다.

+0

당신 말이 맞아요. 탐구 해줘서 고마워. –

관련 문제