public static function beforeSchemaUpdate() { $table = strtolower(get_called_class()); $schema = Schema::get(); $schemadef = $schema->getTableDef($table); // 2015-09-04 We move Notice location data to Notice_location // First we see if we have to do this at all if (!isset($schemadef['fields']['lat']) && !isset($schemadef['fields']['lon']) && !isset($schemadef['fields']['location_id']) && !isset($schemadef['fields']['location_ns'])) { // We have already removed the location fields, so no need to migrate. return; } // Then we make sure the Notice_location table is created! $schema->ensureTable('notice_location', Notice_location::schemaDef()); // Then we continue on our road to migration! echo "\nFound old {$table} table, moving location data to 'notice_location' table... (this will probably take a LONG time, but can be aborted and continued)"; $notice = new Notice(); $notice->query(sprintf('SELECT id, lat, lon, location_id, location_ns FROM %1$s ' . 'WHERE lat IS NOT NULL ' . 'OR lon IS NOT NULL ' . 'OR location_id IS NOT NULL ' . 'OR location_ns IS NOT NULL', $schema->quoteIdentifier($table))); print "\nFound {$notice->N} notices with location data, inserting"; while ($notice->fetch()) { $notloc = Notice_location::getKV('notice_id', $notice->id); if ($notloc instanceof Notice_location) { print "-"; continue; } $notloc = new Notice_location(); $notloc->notice_id = $notice->id; $notloc->lat = $notice->lat; $notloc->lon = $notice->lon; $notloc->location_id = $notice->location_id; $notloc->location_ns = $notice->location_ns; $notloc->insert(); print "."; } print "\n"; }