withCount(['invoices', 'clients', 'products', 'quotes'])->cursor()->each(function ($company) { if ($company->invoices_count > 500 || $company->products_count > 500 || $company->clients_count > 500) { nlog("Marking company {$company->id} as large"); $company->account->companies()->update(['is_large' => true]); } }); nlog("updating all client credit balances"); Client::where('updated_at', '>', now()->subDay()) ->cursor() ->each(function ($client) { $client->credit_balance = $client->service()->getCreditBalance(); $client->save(); }); /* Ensures lower permissioned users return the correct dataset and refresh responses */ Account::whereHas('companies', function ($query) { $query->where('is_large', 0); }) ->whereHas('company_users', function ($query) { $query->where('is_admin', 0); }) ->cursor()->each(function ($account) { $account->companies()->update(['is_large' => true]); }); } else { //multiDB environment, need to foreach (MultiDB::$dbs as $db) { MultiDB::setDB($db); nlog("Company size check db {$db}"); Company::where('is_large', false)->withCount(['invoices', 'clients', 'products', 'quotes'])->cursor()->each(function ($company) { if ($company->invoices_count > 500 || $company->products_count > 500 || $company->clients_count > 500 || $company->quotes_count > 500) { nlog("Marking company {$company->id} as large"); $company->account->companies()->update(['is_large' => true]); } }); nlog("updating all client credit balances"); Client::where('updated_at', '>', now()->subDay()) ->cursor() ->each(function ($client) { $client->credit_balance = $client->service()->getCreditBalance(); $client->save(); }); Account::where('plan', 'enterprise') ->whereDate('plan_expires', '>', now()) ->whereHas('companies', function ($query) { $query->where('is_large', 0); }) ->whereHas('company_users', function ($query) { $query->where('is_admin', 0); }) ->cursor()->each(function ($account) { $account->companies()->update(['is_large' => true]); }); } } } }