Я перебираю набор результатов, и методы updatePoints в конечном счете вызывают save () для пользователя, но он не работает, как я ожидал:
$users = User::join('groups', 'group.id', 'users.group_id')
->where('groups.name', 'xxx')
->get();
foreach($users as $user) {
$user->updatePoints();
}
Очки не обновляются в БД. Я уже нашел проблему. Когда $ this в методе updatePoints имеет идентификатор группы, определенный как атрибут id вместо идентификатора пользователя. Я предполагаю, что именно поэтому вызов save () ничего не сохраняет для самого пользователя. Я могу это исправить, изменив запрос на:
$users = User::join('groups', 'group.id', 'users.group_id')
->where('groups.name', 'xxx')
->select('users.*')
->get();
Тем не менее, у меня может быть эта проблема в нескольких местах в моей кодовой базе. Не удается ли изменить только правильные данные или я должен беспокоиться о том, что непреднамеренные изменения записываются в БД?
Задача ещё не решена.
Других решений пока нет …