2016-11-12 12 views
4

私はlaravelとprotected $属性とmutatorsにいくつか問題があります。Laravelで保護された属性とMutators

私はポイントでユーザーのランキングを持っています。私は、ユーザモデルに、順位付けを伴う別の属性を追加したい。私はこのようなパブリック関数持つユーザーモデルでは

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'のpropetyであなたのミューテータを見ることはできません。 – Skysplit

答えて

2

これは、クラスにprotected $attributesを指定すると、属性のソースがテーブルである場合、Laravelはそれをオーバーライドしないためです。ここでは$attributesのソースはデータベース列です。

しかし、あなたはこのような何かをするとき:

$user = new User; 

は、あなたは test属性が表示されます。

属性を動的に追加するには、appendsプロパティをモデルに使用する必要があります。

+0

あなたは正しいです。説明してくれてありがとう。 –

関連する問題