php – Laravel保护属性和Mutators

我对laravel和protected $attributes和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”跳过保护$属性?

请帮我.

最佳答案 这是因为如果在类中提供受保护的$属性,那么当属性源是表时,Laravel不会覆盖它.这里$attributes的来源是数据库列.

但是当你做这样的事情:

$user = new User;

然后你会看到一个测试属性.

因此,要动态添加属性,您应该在模型上使用appends属性.

点赞