コード例 #1
0
 /**
  * Returns default city
  *
  * @return GeoCity|null
  * @throws \RuntimeException
  */
 public function getDefaultCity()
 {
     if (empty($this->config['default_city'])) {
         return null;
     }
     if (is_null($this->default_city)) {
         $this->default_city = GeoCityQuery::create()->findPk($this->config['default_city']);
         if (!$this->default_city instanceof GeoCity) {
             throw new \RuntimeException('The default city is not found');
         }
     }
     return $this->default_city;
 }
コード例 #2
0
 /**
  * Updates cities
  *
  * @param $resource
  * @param $progress
  */
 protected function updateCities($resource, $progress)
 {
     while (($buffer = fgets($resource, 4096)) !== false) {
         $raw_city = mb_split("\t+", mb_convert_encoding(trim($buffer), 'UTF-8', 'CP-1251'));
         if (count($raw_city) != static::FILE_CITIES_COLUMNS) {
             continue;
         }
         /** @var GeoCity $city */
         $city = GeoCityQuery::create()->filterByid($raw_city[static::CITY_COLUMN_INDEX_ID])->findOneOrCreate();
         $city->setName($raw_city[static::CITY_COLUMN_INDEX_NAME]);
         $city->setRegion($raw_city[static::CITY_COLUMN_INDEX_REGION]);
         $city->setDistrict($raw_city[static::CITY_COLUMN_INDEX_DISTRICT]);
         $city->setLatitude($raw_city[static::CITY_COLUMN_INDEX_LATITUDE]);
         $city->setLongitude($raw_city[static::CITY_COLUMN_INDEX_LONGITUDE]);
         $city->save();
         $city->clearAllReferences(true);
         $progress->advance(mb_strlen($buffer));
         $city = null;
         $rawCity = null;
         $buffer = null;
         unset($city);
         unset($rawCity);
         unset($buffer);
     }
 }