Как обновить столбец в таблице, если результаты API были изменены

Мое заявление: Мое приложение позволяет пользователям прогнозировать результаты всех предстоящих футбольных матчей на следующий игровой день. Я получаю эти данные из API и сохраняю предстоящие игры в своей базе данных. Эти предстоящие игры имеют status из Scheduled, Теперь я хочу запускать cronjob каждые несколько минут, чтобы проверить, было ли изменено состояние этих совпадений на in_play или же finished, если это так, я хочу обновить свой status field в моей базе данных для правильного соответствия с полем состояния из API.

Как я могу проверить, был ли изменен статус, и изменить правильное соответствие в моей базе данных? у меня есть match_id хранится, что может быть использовано для этого?

Мой код:
updateStatus работа

public function handle()
{
$this->updateStatus();
}

public function updateStatus() {

$this->getMatches();

// check if status has been changed from schedulded to 'in_play' or 'finished'
// update the match status of the right matches in my database
}

public function getMatches() {

$client = new Client();
$uri = 'http://api.football-data.org/v2/competitions/PL/matches/?matchday=12&season=2018&matches';
$header = ['headers' => ['X-Auth-Token' => 'My-token']];
$res = $client->get($uri, $header);
return json_decode($res->getBody()->getContents(), true);

}

getMatches job (эта работа получает данные API и сохраняет их в базе данных)

 public function handle()
{
$this->saveMatches();
}

public function saveMatches()
{
$matches = $this->getMatches();

collect($matches['matches'])
->each(function ($match, $key) {
$date = new DateTime($match['utcDate']);
Match::create([
'match_id' => $match['id'],
'homeTeam' => $match['homeTeam']['name'],
'awayTeam' => $match['awayTeam']['name'],
'status'   => $match['status'],
'date'     => $date->format('Y-m-d'),
'time'     => $date->format('H:i'),
'matchday' => $match['matchday'],
'homeScore'=> $match['score']['fullTime']['homeTeam'],
'awayScore'=> $match['score']['fullTime']['awayTeam']
]);
});


}
public function getMatches()
{
$client = new Client();
$uri = 'http://api.football-data.org/v2/competitions/PL/matches/?matchday=12&season=2018&matches';
$header = ['headers' => ['X-Auth-Token' => 'My-token']];
$res = $client->get($uri, $header);
return json_decode($res->getBody()->getContents(), true);
}

0

Решение

Вероятно, вы захотите использовать метод updateOrCreate () Laravel для вашего объекта Match. Уникально идентифицирующая информация представляется идентификатором совпадения. Если это никогда не изменится, тогда, когда вы просматриваете каждое утверждение, вы можете сделать это:

Match::updateOrCreate([
'id' => $match['id'],
],[
'homeTeam' => $match['homeTeam']['name'],
'awayTeam' => $match['awayTeam']['name'],
'status'   => $match['status'],
'date'     => $date->format('Y-m-d'),
'time'     => $date->format('H:i'),
'matchday' => $match['matchday'],
'homeScore'=> $match['score']['fullTime']['homeTeam'],
'awayScore'=> $match['score']['fullTime']['awayTeam']
]);

То, что это делает, ищет существующее совпадение с тем же идентификатором. Если он уже существует, он просто обновит его всей информацией, предоставленной API, включая статус матча и оценки. Если он еще не существует, он вместо этого создаст его и сохранит в базе данных как новое совпадение со всей предоставленной информацией. Надеюсь это поможет!

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]