dillingham / 地区
Laravel 中的自动地址规范化
0.0.8
2021-10-08 16:21 UTC
Requires
- php: ^8.0
- illuminate/contracts: ^8.37
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.1
- nunomaduro/collision: ^5.3
- nunomaduro/larastan: ^0.7.12
- orchestra/testbench: ^6.15
- phpmd/phpmd: ^2.10
- phpunit/phpunit: ^9.3
- spatie/laravel-ray: ^1.23
README
这是一个 Laravel 包,可以自动规范化地址数据。您不需要重复存储城市、州和邮政编码,而是创建表并引用外键。此包接受字符串表示形式,检查它是否存在或创建它,并添加关系。此包还提供访问器,使您感觉不到任何规范化。
安装
您可以通过 composer 安装此包
composer require dillingham/locality
您可以使用以下命令发布配置文件
php artisan vendor:publish --provider="Dillingham\Locality\LocalityServiceProvider" --tag="locality-config"
请将以下列添加到您模型的迁移中
$table->addAddress();
这只是一个添加这些列的简写
将迁移 5 个表
php artisan migrate
然后添加 HasAddress
特性
<?php namespace App\Models; use Dillingham\Locality\HasAddress; class Profile extends Model { use HasAddress; }
用法
Profile::create([ 'address_1' => '104 India St', 'address_2' => 'Apt #3L', 'admin_level_2' => 'Brookyln', 'admin_level_1' => 'NY', 'postal_code' => '11222', ]);
自动地,特性会在存储配置文件时使用 firstOrCreate
'admin_level_2' => 'Brookyln'
成为 admin_level_2
表中布鲁克林的 foreign id
'admin_level_2_id' => 332
访问值
通过访问器访问关系的字符串值
$profile->admin_level_2 == 'Brooklyn' $profile->admin_level_1 == 'NY'
这些访问器在幕后调用关系,在集合中预加载
注意:在保存时,完整的地址格式是静态存储的
$profile->formatted_address == '104 India St, #3l Brooklyn, NY 11222`
附加功能
以下是一些可选的、松散相关的功能:
依赖过滤器
以下是一些用于通过位置信息过滤模型的 API 路由
Route::localityDepenentOptions();
以下假设 routes/api.php 和 RouteServiceProvider.php 中的前缀
GET /api/locality/countries
{ "data": [ { "value": 1, "display": "US" } ] }
GET /api/locality/admin_level_2?country_id=1
{ "data": [ { "value": 1, "display": "NY" } ] }
GET /api/locality/admin_level_1?admin_level_2_id=1
{ "data": [ { "value": 1, "display": "Brooklyn" } ] }
GET /api/locality/postal_code?admin_level_1_id=1
{ "data": [ { "value": 1, "display": "11222" } ] }
测试
composer test
变更日志
请参阅 CHANGELOG 了解最近更改的详细信息。
贡献
请参阅 CONTRIBUTING 了解详细信息。
安全漏洞
请查阅 我们的安全策略 了解如何报告安全漏洞。
鸣谢
许可证
MIT 许可证(MIT)。请参阅 许可证文件 了解更多信息。