ipalaus/geonames

此包已废弃,不再维护。未建议替代包。

一组模型和命令,用于在Eloquent ORM中获取GeoNames的全部功能。

v3.0.1 2016-01-02 11:53 UTC

This package is not auto-updated.

Last update: 2021-11-27 00:29:51 UTC


README

Eloquent Geonames

Build Status Coverage Status

一组Eloquent模型和命令,用于在Laravel中获取GeoNames的全部功能。

安装

在composer.json中将ipalaus/geonames添加为依赖项

{
    "require": {
        "ipalaus/geonames": "3.0.*"
    }
}

注意:如果您正在使用Laravel 5.1,可以使用版本"ipalaus/geonames": "2.0.*"

使用composer update更新您的包或使用composer install进行安装。

安装依赖项后,您需要在Laravel中注册geonames。打开您的app/config/app.php文件,并将以下提供者添加到您的providers数组中

'Ipalaus\Geonames\GeonamesServiceProvider'

如果您现在运行php artisan,您应该看到一个名为geonames的新命名空间和一些与包相关的命令。为了继续安装,请运行以下命令

$ php artisan vendor:publish --provider="Ipalaus\Geonames\GeonamesServiceProvider"

这将发布配置文件到config/geonames.php,并将迁移到您的database/migrations目录。为了能够控制正在发生的事情,我们建议您手动触发php artisan migrate

Artisan命令

导入

导入命令下载所需文件(在配置文件中可配置)并为每个文件运行一个种子器。提供了一些选项

  • --country=XX:下载特定国家(例如,US、ES、FR等)
  • --development:下载较小的名称文件(约10MB),非常适合开发环境。
  • --fetch-only:仅获取文件,但不会运行种子器。如果您想下载文件并在离线时重新生成表,请这样做。
  • --wipe-files:强制删除旧文件。
$ php artisan geonames:import [--country="..."] [--development] [--fetch-only] [--wipe-files]

导入生产数据库可能需要一些时间。主文件约为1GB,种子器必须插入约600万行数据,并为一些字段创建索引。在开发环境中,我强烈建议使用--development选项,并保留完整导入到生产环境中。最终的表大小也可能影响您的本地MySQL实例。

安装

发布包的配置并运行所需的迁移。您可以使用--force选项强制发布配置。

$ php artisan geonames:install [-f|--force]

种子

该命令由geonames:import命令调用。它扩展了Laravel的db:seed命令,并添加了额外的选项:pathcountry。这是由于要导入的文件大小以及我们必须运行的查询,geonames:import为每个种子器创建一个新的Symfony\Component\Process\Process

您通常不需要直接调用此命令。

截断

你想截断表格并从头开始吗?运行

$ php artisan geonames:truncate

Eloquent 模型

大洲

  • 关系
  • hasMany countries

国家

  • 关系
  • belongsTo continent
  • hasMany names

名称

  • 关系
  • belongsTo country,每次请求都预加载

... 更多即将到来!

整合到现有的 Eloquent 模型

ipalaus/geonames 整合到您现有的 Eloquent 模型中,就像这样简单

<?php

class User extends Eloquent {

	public function geoname()
	{
		return $this->belongsTo('Ipalaus\Geonames\Eloquent\Name');
	}

}

现在您可以在 User 模型中添加一个 geoname_id 并通过简单的方式获取结果

$user = User::with('geoname')->find(1);
echo $user->geoname->name;

Name 模型中的 belongsTo country 关系总是预加载的。这意味着您可以使用上述相同的代码获取国家名称。您只需要echo

echo $user->geoname->country->name;

您可以进一步预加载 geoname.country.continent 关系(或 Geoname 模型中存在的任何现有关系)

$user = User::with('geoname.country.continent')->find(1);
echo $user->geoname->country->continent->name;

GeoNames

表格参考

我认为原始表名很难看,并且可能与当前项目中的其他表冲突。我换成了更不丑的。您可以查看迁移文件来查看我们数据库模式使用的名称。

原始 Eloquent Geonames
geoname geonames_names
alternatename geonames_alternate_names
countryinfo geonames_countries
iso_languagecodes geonames_language_codes
admin1CodesAscii geonames_admin_divisions
admin2Codes geonames_admin_subdivisions
hierarchy geonames_hierarchy
featureCodes geonames_features
timeZones geonames_timezones
continentCodes geonames_continents