Работа с командами в dota2-api

В заметках ранее мы рассмотрели работу с матчами. В данных о них есть ряд значений, которых относятся к другим сущностям — это идентификатор турнира, идентификаторы игроков, а так же идентификаторы команд. В данной заметке поговорим о командах.

Поля radiant_team_id и dire_team_id в объектах класса Dota2Api\Models\Match указывают на команды, которые участвуют в данной игре. Значение может быть null, если игроки не обозначили свои команды (забыли или же они не являются игроками одной команды). Помимо этих двух полей есть еще два поля — radiant_name и dire_name. В них находятся имена команд. Тут тоже могут быть null. С точки зрения организации данных, эти два поля избыточны, ведь их значения можно узнать с другого API. Но с точки зрения экономии на запросах это правильное решение — отдавать имена команд вместе с идентификаторами.

Мы же посмотрим, откуда и как можно получить данные по командам и как их сохранить в БД. Для загрузки команд из API есть класс Dota2Api\Mappers\TeamsMapperWeb:

$teamsMapperWeb = new Dota2Api\Mappers\TeamsMapperWeb();
$teamsMapperWeb->setTeamId(36);
$teamsMapperWeb->setTeamsRequested(1);
$teams = $teamsMapperWeb->load();

Здесь мы указываем, что хотим загрузить данные про одну команду с идентификатором 36 (Natus Vincere):

$navi = array_pop($teams);
$navi->get('name'); // 'Natus Vincere'
$navi->get('tag');  // 'Na`Vi'

На данный момент в API есть проблема, что не возвращается поле team_id для команд. Так что, для загруженной команды его надо задавать самому:

$navi->set('team_id', 36);

Из API про команду возвращается довольно много данных — имя, тэг, время создания команды, код страны команды, текущий состав, сколько игр таким составом сыграли, в каких турнирах принимала участие команда и т.д. Но в БД dota2-api записывает только поля team_id и name. Почему так? Потому что имя команды предпочтительнее и более узнаваемо, время создания команды (читай время регистрации команды в клиенте Dota2) полезной смысловой нагрузки не несет, код страны команды не актуален, так как игроки могут быть вообще со всего мира, текущий ростер можно получить из последних матчей команды, список турниров, где играла команда, у вас будет и так, если вы постоянно подгружаете турнирные матчи.

Для записи данных о команде в БД есть класс Dota2Api\Mappers\TeamsMapperDb:

$teamsMapperDb = new Dota2Api\Mappers\TeamsMapperDb();
if (!$navi->get('team_id')) {
    $navi->set('team_id', 36);
}
$teamsMapperDb->save($navi);

Загрузить данные по командам из БД можно так:

$teams = $teamsMapperDb->load(); // all teams in the DB
$teams = $teamsMapperDb->load(36); // one team
$teams = $teamsMapperDb->load(array(36, 111474)); // two teams

Для удаления команд есть метод delete:

$teamsMapperDb->delete(36); // delete one team
$teamsMapperDb->delete(array(36, 111474)); // delete two teams

По командам все.

, ,

Оставить комментарий

Top ↑ | Main page | Back