gidiyorum / geonames
一组模型和命令,以获取GeoNames在Eloquent ORM中的全部功能。
Requires
- php: >=7.0
- ext-zip: *
- laravel/framework: ^5.5
Requires (Dev)
- mockery/mockery: 0.9.*
- phpunit/phpunit: ~5.0
This package is auto-updated.
Last update: 2024-09-22 07:46:45 UTC
README
一组Eloquent模型和命令,以获取Laravel中的GeoNames的全部功能。
安装
将ipalaus/geonames
添加到composer.json的需求中
{ "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命令
导入
导入命令下载所需的文件(在配置文件中可配置)并为每个文件运行一个seeder。提供了一些选项
--country=XX
:下载特定国家(例如,US,ES,FR...)--development
:下载一个较小的名称文件(约10MB),对于开发环境非常有用。--fetch-only
:仅获取文件但不运行seeder。如果您想要下载文件并在离线时重新生成表,则可以使用此选项。--wipe-files
:强制删除旧文件。
$ php artisan geonames:import [--country="..."] [--development] [--fetch-only] [--wipe-files]
导入生产数据库可能需要一段时间。主文件约为1GB,seeder必须插入约600万行数据,同时为一些字段创建索引。在开发环境中,强烈建议使用--development
选项并将完整导入保留到生产环境中。最终表的大小也可能影响您的本地MySQL实例。
安装
发布包的配置并运行所需的迁移。您可以使用--force
选项强制发布配置。
$ php artisan geonames:install [-f|--force]
播种
该命令由geonames:import
命令调用。它扩展了Laravel的db:seed
,并添加了额外的选项:path
和country
。这是由于要导入的文件的大小以及我们必须运行的查询,geonames:import
为每个seeder创建了一个新的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
表参考
我认为原始的表名很丑,它们可能与当前项目中的其他表冲突。我换成了不那么丑的名称。您可以通过查看 迁移文件 来了解我们数据库架构使用的名称。