arberd/geonames

GeoNames所有功能的Eloquent ORM模型和命令集合。

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

This package is not auto-updated.

Last update: 2024-09-15 01:17:22 UTC


README

Build Status Coverage Status

基于 ipalaus/geonames

GeoNames在Laravel中的Eloquent模型和命令集合,以获取所有功能。

安装

arberd/geonames 添加到 composer.json 作为依赖项

{
    "require": {
        "arberd/geonames": "dev-master"
    }
}

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

使用 composer updatecomposer 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 命令,但添加了额外的选项: pathcountry。这是由于要导入的文件的大小以及我们必须运行的查询, 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

表格引用

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