Я бы сделал что-то вроде этого ... Имейте в виду: это код PSEUDO, просто чтобы показать направление для решения ...
Переместить логику точек в пользовательскую модель
class User extends Model {
public function points(){
.. your point logic ..
}
}
Затем в контроллере, но лучше где-то еще: попросите всех пользователей из группы извлечь коллекцию.
$collection = $team->users()->all();
Затем вы выполните цикл по коллекции, подсчитывая баллы пользователей по всем отдельным пользователям...
$collection->sum(function(User $user){
return $user->points();
});
Таким образом, вы получите общую сумму для всей команды ...
Если вы сделаете что-то подобное с вами, модель вашей команды:
class Team extends Model {
public function getTotalUserPoints(){
$allUsers = $team->users()->all();
return $allUsers->sum(function(User $user){
return $user->points();
});
}
}
Вы можете получить общую сумму для команды, просто выполнив:
$team->getTotalUserPoints()
А для отдельного пользователя вы можете получить очки, вызвав ту же логику.
$user->points()
И получитьобщее количество команды через отдельного пользователя:
$user->team->getTotalUserpoints()
Опять же, псевдокод, просто чтобы дать людям представление о том, с чего начать.Таким образом, вы получаете всю бизнес-логику о баллах в одном месте (модель пользователя), но вы используете ее для получения как общих, так и индивидуальных баллов.