У меня есть проблемы с атрибутами и мутаторами laravel и protected $.
У меня есть рейтинг пользователей с баллами. Я хочу добавить в пользовательскую модель еще одну атрибуцию с рейтингом позиции.
В пользовательской модели у меня есть публичная функция, как это:
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');
Ларавел тоже не видит теста …
Но когда я добавлю это:
protected $appends = array('RankPosition');
и в моем контроллере я нахожу всех пользователей и получаю ответ на json, затем в ответе json я вижу значение как RankPosition с правильным значением … 🙁
Что я делаю не так? Почему «мой ларавел» пропускает защищенные атрибуты $?
Пожалуйста, помогите мне.
Это потому, что если вы предоставите protected $attributes
в вашем классе Laravel не переопределяет его, когда источником атрибутов является таблица. Здесь источник $attributes
столбец базы данных.
Но когда вы делаете что-то вроде этого:
$user = new User;
тогда вы увидите test
приписывать.
Таким образом, для динамического добавления атрибутов вы должны использовать appends
Свойство по модели.
Других решений пока нет …