database/migrations/2018_07_08_104306_update-timestamps-timezone.php (103 lines of code) (raw):
<?php
use Carbon\Carbon;
use Illuminate\Support\Facades\DB;
use Illuminate\Database\Migrations\Migration;
class UpdateTimestampsTimezone extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
$timezone = env('APP_DEFAULT_TIMEZONE', 'UTC');
if ($timezone == null || $timezone == 'UTC') {
return;
}
$this->update('accounts', $timezone);
$this->update('activities', $timezone);
$this->update('activity_statistics', $timezone);
$this->update('activity_types', $timezone);
$this->update('activity_type_categories', $timezone);
$this->update('addresses', $timezone);
$this->update('api_usage', $timezone);
$this->update('calls', $timezone);
$this->update('changelogs', $timezone);
$this->update('changelog_user', $timezone, 'changelog_id');
DB::table('contacts')->chunkById(200, function ($models) use ($timezone) {
foreach ($models as $model) {
$created = is_null($model->created_at) ? null : Carbon::createFromTimeString($model->created_at, $timezone)->setTimezone('UTC');
$updated = is_null($model->updated_at) ? null : Carbon::createFromTimeString($model->updated_at, $timezone)->setTimezone('UTC');
$last_consulted_at = is_null($model->last_consulted_at) ? null : Carbon::createFromTimeString($model->last_consulted_at, $timezone)->setTimezone('UTC');
DB::table('contacts')->where('id', $model->id)
->update([
'created_at' => $created,
'updated_at' => $updated,
'last_consulted_at' => $last_consulted_at,
]);
}
});
$this->update('contact_fields', $timezone);
$this->update('contact_field_types', $timezone);
$this->update('contact_tag', $timezone, 'contact_id');
$this->update('currencies', $timezone);
$this->update('days', $timezone);
$this->update('debts', $timezone);
$this->update('default_contact_field_types', $timezone);
$this->update('default_contact_modules', $timezone);
$this->update('default_activity_types', $timezone);
$this->update('default_activity_type_categories', $timezone);
$this->update('default_relationship_types', $timezone);
$this->update('default_relationship_type_groups', $timezone);
$this->update('entries', $timezone);
$this->update('events', $timezone);
$this->update('genders', $timezone);
$this->update('gifts', $timezone);
$this->update('import_jobs', $timezone);
$this->update('import_job_reports', $timezone);
$this->update('instances', $timezone);
$this->update('invitations', $timezone);
DB::table('jobs')->chunkById(200, function ($models) use ($timezone) {
foreach ($models as $model) {
$created = is_null($model->created_at) ? null : Carbon::createFromTimeString($model->created_at, $timezone)->setTimezone('UTC');
DB::table('jobs')->where('id', $model->id)
->update([
'created_at' => $created,
]);
}
});
$this->update('journal_entries', $timezone);
$this->update('metadata_love_relationships', $timezone);
$this->update('notes', $timezone);
$this->update('notifications', $timezone);
$this->update('oauth_access_tokens', $timezone);
$this->update('oauth_clients', $timezone);
$this->update('oauth_personal_access_clients', $timezone);
$this->update('pets', $timezone);
$this->update('pet_categories', $timezone);
$this->update('relationships', $timezone);
$this->update('relationship_types', $timezone);
$this->update('relationship_type_groups', $timezone);
$this->update('reminders', $timezone);
$this->update('reminder_rules', $timezone);
$this->update('special_dates', $timezone);
$this->update('statistics', $timezone);
$this->update('subscriptions', $timezone);
$this->update('tags', $timezone);
$this->update('tasks', $timezone);
$this->update('terms', $timezone);
$this->update('term_user', $timezone, 'account_id');
$this->update('u2f_key', $timezone);
$this->update('users', $timezone);
}
/**
* Update the timestamps table.
*
* @param string $table
* @param string $timezone
* @param string $id
*/
private static function update($table, $timezone, $id = 'id')
{
DB::table($table)->orderBy($id)->chunk(200, function ($models) use ($table, $timezone, $id) {
foreach ($models as $model) {
$created = is_null($model->created_at) ? null : Carbon::createFromTimeString($model->created_at, $timezone)->setTimezone('UTC');
$updated = is_null($model->updated_at) ? null : Carbon::createFromTimeString($model->updated_at, $timezone)->setTimezone('UTC');
DB::table($table)->where($id, $model->$id)
->update([
'created_at' => $created,
'updated_at' => $updated,
]);
}
});
}
}