. */ namespace Poniverse\Ponyfm\Console\Commands; use Illuminate\Console\Command; use Illuminate\Database\Eloquent\Collection; use Poniverse\Ponyfm\Models\Album; use Poniverse\Ponyfm\Models\Playlist; use Poniverse\Ponyfm\Models\Track; use Poniverse\Ponyfm\Models\User; class RebuildSearchIndex extends Command { /** * The name and signature of the console command. * * @var string */ protected $signature = 'rebuild:search'; /** * The console command description. * * @var string */ protected $description = 'Rebuilds the Elasticsearch index.'; /** * Create a new command instance. * * @return void */ public function __construct() { parent::__construct(); } /** * Execute the console command. * * @return mixed */ public function handle() { $totalTracks = Track::withTrashed()->count(); $totalAlbums = Album::withTrashed()->count(); $totalPlaylists = Playlist::withTrashed()->count(); $totalUsers = User::count(); Track::withTrashed()->chunk(200, function(Collection $tracks) { foreach($tracks as $track) { $this->info("Processing track #{$track->id}..."); $track->ensureElasticsearchEntryIsUpToDate(); } }); Album::withTrashed()->chunk(200, function(Collection $albums) { foreach($albums as $album) { $this->info("Processing album #{$album->id}..."); $album->ensureElasticsearchEntryIsUpToDate(); } }); Playlist::withTrashed()->chunk(200, function(Collection $playlists) { foreach($playlists as $playlist) { $this->info("Processing playlist #{$playlist->id}..."); $playlist->ensureElasticsearchEntryIsUpToDate(); } }); User::chunk(200, function(Collection $users) { foreach($users as $user) { $this->info("Processing user #{$user->id}..."); $user->ensureElasticsearchEntryIsUpToDate(); } }); } }