id); $tv = Tv::updateOrCreate(['id' => $this->id], $tvScraper->getTv()); // Companies $companies = []; foreach ($this->tv['production_companies'] ?? [] as $company) { $companies[] = (new Client\Company($company['id']))->getCompany(); } Company::upsert($companies, 'id'); $tv->companies()->sync(array_unique(array_column($companies, 'id'))); // Networks $networks = []; foreach ($this->tv['networks'] ?? [] as $network) { $networks[] = (new Client\Network($network['id']))->getNetwork(); } Network::upsert($networks, 'id'); $tv->networks()->sync(array_unique(array_column($networks, 'id'))); // Genres Genre::upsert($tvScraper->getGenres(), 'id'); $tv->genres()->sync(array_unique(array_column($tvScraper->getGenres(), 'id'))); // People $credits = $tvScraper->getCredits(); $people = []; foreach (array_unique(array_column($credits, 'person_id')) as $person_id) { $people[] = (new Client\Person($person_id))->getPerson(); } Person::upsert($people, 'id'); Credit::where('tv_id', '=', $this->id)->delete(); Credit::upsert($credits, ['person_id', 'movie_id', 'tv_id', 'occupation_id', 'character']); // Seasons and episodes $seasons = []; $episodes = []; foreach ($tvScraper->getSeasons() as $season) { $seasonScraper = new Client\Season($this->id, $season['season_number']); $seasons[] = $seasonScraper->getSeason(); array_push($episodes, ...$seasonScraper->getEpisodes()); } Season::upsert($seasons, 'id'); Episode::upsert($episodes, 'id'); // Recommendations Recommendation::upsert($tvScraper->getRecommendations(), ['recommendation_tv_id', 'tv_id']); } }