api = new Api(); } public function syncUsers() { $karatUsers = \App\Services\Karat\User::all(); $dbUsers = User::all(); $this->insertUsersFromKarat($karatUsers, $dbUsers); $this->removeUsersThatAreNotInKaratAnymore($karatUsers, $dbUsers); } private function insertUsersFromKarat(Collection $karatUsers, Collection $dbUsers) { $emailsToSkip = $dbUsers->pluck('email' )->intersect( $karatUsers->pluck('email')); $karatUsersToInsert = $karatUsers->reject(function ($item) use ($emailsToSkip) { return $emailsToSkip->contains($item->email); })->map(function ($item) { $array = $item->toArray(); return $array; }); User::insert($karatUsersToInsert->toArray()); } private function removeUsersThatAreNotInKaratAnymore( Collection $karatUsers, Collection $dbUsers ) { $emailsInDbThatAreNotInKaratAnymore = $dbUsers->pluck('email' )->diff( $karatUsers->pluck('email')); User::whereIn('email', $emailsInDbThatAreNotInKaratAnymore)->delete(); } }