playerRepository->createQueryBuilder('p') ->join('p.session', 's') ->where('p.user = :user') ->andWhere('s.status IN (:statuses)') ->setParameter('user', $user) ->setParameter('statuses', [ SessionStatus::READY, SessionStatus::PLAYING, ]) ->setMaxResults(1) ->getQuery() ->getOneOrNullResult(); return $player; } public function getCurrentPwdOfPlayer(Player $player) : ?string { $settingName = match($player->getScreen()) { 1 => SessionSettingType::PWD_FOR_PLAYER1, 2 => SessionSettingType::PWD_FOR_PLAYER2, 3 => SessionSettingType::PWD_FOR_PLAYER3, default => null, }; if (!$settingName) { return null; } $setting = $this->sessionSettingRepository->getSetting($player->getSession(), $settingName, $player); return $setting?->getValue(); } public function saveCurrentPwdOfPlayer(Player $player, string $newLocation) { $settingName = match($player->getScreen()) { 1 => SessionSettingType::PWD_FOR_PLAYER1, 2 => SessionSettingType::PWD_FOR_PLAYER2, 3 => SessionSettingType::PWD_FOR_PLAYER3, default => null, }; if (!$settingName) { return; } $setting = $this->sessionSettingRepository->getSetting($player->getSession(), $settingName, $player); $setting->setValue($newLocation); $this->entityManager->persist($setting); $this->entityManager->flush(); } }