masterix21 / laravel-addressable
适用于任何 Eloquent 模型的地址
资助包维护!
masterix21
github.com/masterix21
Requires
- php: ^8.1|^8.2|^8.3
- illuminate/contracts: ^11.23
Requires (Dev)
- larastan/larastan: ^2.9
- laravel/pint: ^1.17
- orchestra/testbench: ^9.4
- pestphp/pest: ^3.1
- pestphp/pest-plugin-arch: ^3.0
- pestphp/pest-plugin-drift: 3.x-dev
- pestphp/pest-plugin-laravel: ^3.0
- phpstan/extension-installer: ^1.4
- phpstan/phpstan-deprecation-rules: ^1.2
- phpstan/phpstan-phpunit: ^1.4
README
此包为任何 Eloquent 模型添加了地址:这样将更容易支持账单地址、发货地址或其他地址。
支持我们
如果你喜欢我的工作,你可以通过 赞助我。
安装
你可以通过 composer 安装此包
composer require masterix21/laravel-addressable
你可以使用以下命令发布和运行迁移
php artisan vendor:publish --provider="Masterix21\Addressable\AddressableServiceProvider" --tag="migrations" php artisan migrate
你可以使用以下命令发布配置文件
php artisan vendor:publish --provider="Masterix21\Addressable\AddressableServiceProvider" --tag="config"
使用方法
扩展 Eloquent 模型以支持地址很简单。
use Masterix21\Addressable\Models\Concerns\HasAddresses; class User extends Model { use HasAddresses; } $user->shipments(); // morphMany of `Masterix21\Addressable\Models\Address`
HasAddress
是一个通用特性,它将实现所有地址代码,但如果你想要处理发货地址或账单地址,还有其他两个特性。
use Masterix21\Addressable\Models\Concerns\HasBillingAddresses; use Masterix21\Addressable\Models\Concerns\HasShippingAddresses; class User extends Model { use HasBillingAddresses, HasShippingAddresses; } $user->billingAddress(); // Primary billing address $user->billingAddresses(); // All billing addresses $user->shippingAddress(); // Primary shipment address $user->shippingAddresses(); // All shipment addresses
标记和取消标记地址为主要地址
为了确保每个类型的地址只有一个“主要”地址,你可以使用 markPrimary()
方法。这将标记地址为主要地址,并将取消标记其他(同类型的)地址。
$shippingAddress->markPrimary(); // It will emit the events `AddressPrimaryMarked` and `ShippingAddressPrimaryMarked` $shippingAddress->unmarkPrimary(); // It will emit the events `AddressPrimaryUnmarked` and `ShippingAddressPrimaryUnmarked` $billingAddress->markPrimary(); // It will emit the events `AddressPrimaryMarked` and `BillingAddressPrimaryMarked` $billingAddress->unmarkPrimary(); // It will emit the events `AddressPrimaryUnmarked` and `BillingAddressPrimaryUnmarked`
创建带位置的账单地址
$user->billingAddress()->create([ 'street_address1' => 'Via Antonio Izzi de Falenta, 7/C', 'zip' => '88100', 'city' => 'Catanzaro', 'state' => 'CZ', 'country' => 'Italy', 'country_code' => 'IT', 'position' => [ 'longitude' => 36.01010, 'latitude' => 16.0129 ] ]);
存储地址的经纬度
$billingAddress->position = new Point(38.90852, 16.5894); $billingAddress->save();
根据地址与另一个点的距离进行查询
// Take all addresses within 10 km $addresses = Address::query() ->withPositionDistance(new Point(38.90852, 16.5894), 10000) ->get(); // Take all addresses over 10 km $addresses = Address::query() ->withPositionDistance(new Point(38.90852, 16.5894), 10000, '>=') ->get();
测试
composer test
待办事项
- 获取 X 公里范围内所有附近地址的方法
变更日志
请参阅 CHANGELOG 了解最近更改的更多信息。
贡献
请参阅 CONTRIBUTING 了解详细信息。
安全
如果你发现任何安全相关的问题,请通过电子邮件 l.longo@ambita.it 而不是使用问题跟踪器。
致谢
许可证
MIT 许可证(MIT)。请参阅 许可证文件 了解更多信息。