39 lines
1.1 KiB
PHP
39 lines
1.1 KiB
PHP
<?php namespace MapGuesser\Repository;
|
|
|
|
use SokoWeb\Database\Query\Select;
|
|
use MapGuesser\PersistentData\Model\Challenge;
|
|
use MapGuesser\PersistentData\Model\Map;
|
|
use MapGuesser\PersistentData\Model\Place;
|
|
use SokoWeb\PersistentData\PersistentDataManager;
|
|
|
|
class MapRepository
|
|
{
|
|
private PersistentDataManager $pdm;
|
|
|
|
public function __construct()
|
|
{
|
|
$this->pdm = new PersistentDataManager();
|
|
}
|
|
|
|
public function getById(int $mapId): ?Map
|
|
{
|
|
return $this->pdm->selectFromDbById($mapId, Map::class);
|
|
}
|
|
|
|
public function getByPlace(Place $place): ?Map
|
|
{
|
|
return $this->getById($place->getMapId());
|
|
}
|
|
|
|
public function getByChallenge(Challenge $challenge): ?Map
|
|
{
|
|
$select = new Select(\Container::$dbConnection);
|
|
$select->innerJoin('places', ['maps', 'id'], '=', ['places', 'map_id']);
|
|
$select->innerJoin('place_in_challenge', ['places', 'id'], '=', ['place_in_challenge', 'place_id']);
|
|
$select->where('challenge_id', '=', $challenge->getId());
|
|
$select->limit(1);
|
|
|
|
return $this->pdm->selectFromDb($select, Map::class);
|
|
}
|
|
}
|