arberd / geonames
GeoNames所有功能的Eloquent ORM模型和命令集合。
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
基于 ipalaus/geonames
GeoNames在Laravel中的Eloquent模型和命令集合,以获取所有功能。
安装
将 arberd/geonames
添加到 composer.json 作为依赖项
{ "require": { "arberd/geonames": "dev-master" } }
注意:如果您正在使用Laravel 5.1,可以使用版本 "arberd/geonames": "2.0.*"
。
使用 composer update
或 composer install
更新您的包。
安装依赖项后,您需要在Laravel中注册 geonames
。打开您的 app/config/app.php
并将以下提供者添加到您的 providers
数组中
'Arberd\Geonames\GeonamesServiceProvider'
现在,如果您运行 php artisan
,您应该会看到一个名为 geonames 的新命名空间以及一些与包相关的命令。为了继续安装,请运行以下命令
$ php artisan vendor:publish --provider="Arberd\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模型
将 arberd/geonames
集成到现有Eloquent模型与以下操作一样简单
<?php class User extends Eloquent { public function geoname() { return $this->belongsTo('Arberd\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
表格引用
我认为原始的表名很难看,并且可能与当前项目中其他表冲突。我换成了不那么难看的名字。您可以查看 迁移文件,以查看我们数据库模式中使用的名称。