slivka-b/laravel-geonames

[分支] 该包允许将 geonames 数据库集成到 Laravel 应用程序中。

0.1.1 2023-03-21 13:34 UTC

This package is auto-updated.

Last update: 2024-09-21 16:46:11 UTC


README

目前处于开发中。它可能会接收到可能导致破坏性变更的更新。不建议在生产环境中使用。

该包允许将 geonames 数据库集成到 Laravel 应用程序中。

🗒️ 描述

此包是 nevadskiy/laravel-geonames 的分支。

对于依赖于地理数据的程序,此包非常有用。

默认情况下,该包提供 5 个表:continentscountriesdivisionscitiestranslations,并使用从 geonames 服务获取的数据填充它们。

它还允许保持数据 最新,因此该包会获取 geonames 服务提供的所有每日修改,并使用它们来同步您的数据库。

您还可以设置包以仅同步特定国家的数据,禁用不必要的表,设置最小人口过滤器并使用您自己的自定义模型。

翻译由 imcity-tech/laravel-translatable 提供。

🔌 安装

composer require imcity-tech/laravel-geonames

✅ 要求

  • Laravel 9.0 或更高版本
  • PHP 8.0 或更高版本

🔨 使用

默认结构和行为

  • 迁移数据库
php artisan migrate
  • 运行插入过程
php artisan geonames:insert

它将下载并将 geonames 数据集插入到您的数据库中。

请注意,插入过程可能需要一些时间。平均大约需要 15 分钟(不包括下载时间)。

安排更新

如果您想接收 geonames 的每日更新,请将以下代码添加到您的控制台内核(app/Console/Kernel.php)中。

protected function schedule(Schedule $schedule)
{
    $schedule->command('geonames:update')->dailyAt('4:00');
}

注意,时间指定为 UTC 时区,因此如果您在另一个时区运行服务器,则需要根据它进行转换。

配置自定义结构

如果您想根据您的需求配置包,您需要首先发布包配置。

php artisan vendor:publish --tag=geonames-config

指定源

您可以选择以下之一作为种子数据源:SOURCE_ALL_COUNTRIESSOURCE_SINGLE_COUNTRYSOURCE_ONLY_CITIES

默认值为 SOURCE_ALL_COUNTRIES,表示从 allCountries.zip 文件中获取数据。它包含所有 4 个模型(continentscountriesdivisionscities)。您可以在 geonames 配置文件中配置 过滤器,以指定将要填充的 国家最小人口

SOURCE_SINGLE_COUNTRY 源用于从基于国家的文件(例如 US.zip)获取数据。使用此源不会填充 continents 表。您可以在 geonames 配置文件中指定 国家过滤器,以指定将要填充的国家(或多个国家)。

使用 SOURCE_ONLY_CITIES 数据源从基于城市的文件中获取数据(例如,cities500.zip)。此数据源类型仅提供 cities 表。您可以通过指定 最小人口过滤器 来指示按人口获取哪个文件。还可以使用国家过滤器来生成仅属于特定国家的城市。

指定过滤器

默认情况下,有两个过滤器可供您用于过滤要播种的数据。

国家过滤器

countries 过滤器用于过滤仅属于特定国家(或国家)的数据。如果指定了 SOURCE_SINGLE_COUNTRY ,则此过滤器将用于下载基于国家的数据源。默认值是 *,表示允许所有国家。可以指定多个国家,作为 ISO 国家代码的数组。

示例

'filters' => [
    'countries' => ['AU', 'US']
]

人口过滤器

population 过滤器用于根据指示的最小人口过滤城市。如果指定了 SOURCE_ONLY_CITIES ,则此过滤器将用于下载基于城市的来源。任何从 0 及以上的值都可以使用,但与 SOURCE_ONLY_CITIES 源结合时,可用值仅为 5001000500015000

示例

'filters' => [
    'population' => 15000
]

覆盖模型

您可能需要自己的模型,这些模型具有自己的行为和关系,而不是默认提供的模型。

要覆盖它们,请在 geonames 配置文件中使用 models 键。

如果您不打算使用任何模型,可以将值切换到 false,然后相应的表将根本不会迁移。

例如,大多数应用程序可能不需要大陆模型。

'models' => [
    'continent' => false,
    'country' => App\Models\Country::class,
    'division' => App\Models\Division::class,
    'city' => App\Models\City::class,
],

覆盖迁移

要重命名表或删除不必要的字段,您可以发布迁移并在执行迁移命令之前编辑它们。

  • 要发布默认迁移,请使用以下命令
php artisan vendor:publish --tag=geonames-migrations
  • 然后在 geonames 配置文件中将 default_migrations 设置为 false,以禁用默认迁移的迁移。
'default_migrations' => false

插入自定义结构

  • 配置 过滤器 后,您可以执行迁移命令。它将确定哪些表应该迁移并在数据库中创建它们。
php artisan migrate
  • 然后您可以运行插入命令。
php artisan geonames:insert

重新插入数据集

有时您可能需要删除所有数据并重新插入。要完成此操作,请将 --reset 选项传递给 geonames:insert 命令。

php artisan geonames:insert --reset

📑 变更日志

有关最近更改的更多信息,请参阅 CHANGELOG

☕ 贡献

有关更多信息,请参阅 CONTRIBUTING

🔓 安全性

如果您发现任何与安全相关的问题,请通过 电子邮件 而不是使用问题跟踪器联系我。

📜 许可证

MIT 许可证(MIT)。有关更多信息,请参阅 LICENSE