Задать вопрос
@QNA-1976

Какую проверку лучше использовать?

В БД при выполнении миссии жёстко задано exp_mission = exp_mission + 10
Сейчас проверяю так:
if ($this->mission->exp_mission == 100) {
    throw new DomainException('Вы уже выполнили эту миссию полностью');
}
// тут запрос вида ... update missions set exp_mission = exp_mission + 10 where id = ? and id_mission = ? limit 1 ...

А может быть надо так?
if ($this->mission->exp_mission >= 100) {
    if ($this->mission->exp_mission > 100) {
        // тут запрос вида ... update missions set exp_mission = 100 where id = ? and id_mission = ? limit 1 ...
    }
    throw new DomainException('Вы уже выполнили эту миссию полностью');
}
// тут запрос вида ... update missions set exp_mission = exp_mission + 10 where id = ? and id_mission = ? limit 1 ...

Страхуем exp_mission = exp_mission + 10 или не нужно?
  • Вопрос задан
  • 108 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
myks92
@myks92 Куратор тега PHP
Нашёл решение — пометь вопрос ответом!
class Controller 
{
  private $repo;

  pulic function __construct(MissionRepository $repo) 
  {
    $this->repo = $repo;
  }

  pulic function excuteMission($id)
  {
    $mission = $this->repo->find($id);
    $mission->next();
    $mission->save();
  }
}

class Mission
{
  private $progress;

  public function next(): void
  {
    $progress = $this->progress + 10;

    if($progress > 100) {
      throw new DomainExeption('Миссия не может быть выполнена.')
    }
    if($progress = 100) {
      throw new DomainExeption('Миссия уже выполнена.')
    }
  }
}

А вообще используйте тесты и вы сами поймёте что нужно, что не нужно.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы