Этого можно добиться, получив все данные совпадений и затем просматривая каждый из них, используя collection .
Коллекции можно создавать из данных массива с помощью collect () helper.
class GuzzleController extends Controller
{
public function getMatches()
{
$client = new Client();
$uri = 'http://api.football-data.org/v2/competitions/PL/matches/?matchday=9&season=2018&matches';
$header = ['headers' => ['X-Auth-Token' => 'My-Token']];
$res = $client->get($uri, $header);
$data = json_decode($res->getBody()->getContents(), true);
return $data['matches'];
}
public function saveMatches()
{
$matches = $this->getMatches();
collect($matches)
->each(function ($match, $key) {
Match::create([
'match_id' => $match['id'],
'homeTeam' => $match['homeTeam']['name'],
'awayTeam' => $match['awayTeam']['name']
]);
});
}
}
С помощью этого кода мы вызываем функцию saveMatches()
, которая вызывает функцию getMatches()
(используется для запуска вызова guzzle).
Затем для каждого совпадения мы сохраняем новую запись в базе данных, используя фасад Match
.
Примечания
- Как упоминалось выше,Лучше всего создать модель
Team
, чтобы вы могли идентифицировать и вызывать совпадения на основе команд. - Обязательно вызовите переменную класса
$fillable
или $guarded
в вашем Match
модель для хранения данных ( см. здесь ).
Обновление
Чтобы использовать эту функцию в работе, сначала необходимо создать работу, используя
php artisan make:job <job name>
Например, задание можно назвать CreateMatches
.Это будет находиться в app/Jobs/CreateMatches.php
.
Там вы увидите функцию handle()
, которая используется для вызова любых функций внутри нее после запуска задания.
public function handle()
{
$this->saveMatches();
}
public function saveMatches()
{
// Code goes here
}
public function getMatches()
{
// Code goes here
}
Youзатем можно вызвать задание в любом месте логики приложения, используя CreateMatches::dispatch()
или dispatch(new CreateMatches())
(не забудьте use
класс в верхней части вашего файла).