Laravel 受保护的属性和修改器

Laravel protected attributes and Mutators

我对 laravel 和 protected $attributes 和 mutators 有一些疑问。

我有积分用户排名。我想向用户模型添加另一个具有排名位置的属性。

在用户模型中我有这样的 public 函数:

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 这样的值具有正确的值...:(

我做错了什么?为什么 "my laravel" 会跳过受保护的 $attributes?

请帮助我。

这是因为,如果您在 class 中提供 protected $attributes,那么当属性源是 table 时,Laravel 不会覆盖它。这里 $attributes 的来源是数据库列。

但是当你做这样的事情时:

$user = new User;

然后你会看到一个 test 属性。

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