У меня стоит задача распарсить сайт и результат сохранить в базу, к которой будет обращаться другой сервис. Сейчас у меня есть такой метод:
private function getData(string $responseBody): array
{
$crawler = new Crawler($responseBody);
$result = [];
$types = $crawler->filter('div.event-list-item__type')->each(function (Crawler $node, $i) {
return $node->text();
});
$result['type'] = $types;
$titles = $crawler->filter('a.event-list-item__title')->each(function (Crawler $node, $i) {
return $node->text();
});
$result['title'] = $titles;
$times = $crawler->filter('div.event-list-item__info')->each(function (Crawler $node, $i) {
return $node->text();
});
$result['time'] = $times;
$locations = $crawler->filter('div.event-list-item__info_location')->each(function (Crawler $node, $i) {
return $node->text();
});
$result['location'] = $locations;
$links = $crawler->filter('a.event-list-item__title')->each(function (Crawler $node, $i) {
return $node->attr('href');
});
$result['link'] = $links;
return $result;
}
Возвращается массив массивов. Мне нужно сохранить его с сохранением целостности записи. Другими словами, у меня имя события в первом массиве, тип события в другом, время - в третьем и так далее. Раньше парсил первый элемент со страницы и использовал dto, которая отлично с этим справлялась, а как применить такое к массиву - ума не приложу. В целом, сохранение идет в этом месте:
$novel->parse(...$urls)->then(function (array $events) use ($connection) {
$connection->save($events);
});
Может, посоветуете что? Спасибо.