slivka-b / laravel-geonames
[分支] 该包允许将 geonames 数据库集成到 Laravel 应用程序中。
Requires
- php: ^8.1
- ext-json: *
- ext-zip: *
- laravel/framework: ^10.0
- slivka-b/laravel-translatable: ^0.1
- slivka-b/laravel-uuid: ^0.1
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.16
- orchestra/testbench: ^5.0|^6.0
- phpunit/phpunit: ^8.0
This package is auto-updated.
Last update: 2024-09-21 16:46:11 UTC
README
目前处于开发中。它可能会接收到可能导致破坏性变更的更新。不建议在生产环境中使用。
该包允许将 geonames 数据库集成到 Laravel 应用程序中。
🗒️ 描述
此包是 nevadskiy/laravel-geonames 的分支。
对于依赖于地理数据的程序,此包非常有用。
默认情况下,该包提供 5 个表:continents
、countries
、divisions
、cities
和 translations
,并使用从 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_COUNTRIES
、SOURCE_SINGLE_COUNTRY
或 SOURCE_ONLY_CITIES
。
默认值为 SOURCE_ALL_COUNTRIES
,表示从 allCountries.zip 文件中获取数据。它包含所有 4 个模型(continents
、countries
、divisions
和 cities
)。您可以在 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
源结合时,可用值仅为 500
、1000
、5000
和 15000
。
示例
'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。