ipalaus / geonames
一组模型和命令,用于在Eloquent ORM中获取GeoNames的全部功能。
Requires
- php: >=5.5.9
- ext-zip: *
- illuminate/config: >=5.1.0
- illuminate/console: >=5.1.0
- illuminate/database: >=5.1.0
- illuminate/filesystem: >=5.1.0
- illuminate/support: >=5.1.0
- symfony/process: 2.8.*|3.0.*
Requires (Dev)
- mockery/mockery: ~0.9.2
- phpunit/phpunit: ~4.1
README
Eloquent Geonames
一组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
命令,并添加了额外的选项:path
和country
。这是由于要导入的文件大小以及我们必须运行的查询,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 |