Laravel защищенные атрибуты и мутаторы

У меня есть проблемы с атрибутами и мутаторами 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 с правильным значением … 🙁

Что я делаю не так? Почему «мой ларавел» пропускает защищенные атрибуты $?

Пожалуйста, помогите мне.

4

Решение

Это потому, что если вы предоставите protected $attributes в вашем классе Laravel не переопределяет его, когда источником атрибутов является таблица. Здесь источник $attributes столбец базы данных.

Но когда вы делаете что-то вроде этого:

$user = new User;

тогда вы увидите test приписывать.

Таким образом, для динамического добавления атрибутов вы должны использовать appends Свойство по модели.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]