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
属性。
我对 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
属性。