grnspc / addressable
Laravel Addressable 是一个多态的 Laravel 包,用于地址簿管理。您可以轻松地将地址添加到任何 eloquent 模型。
v2.0.1
2022-01-28 00:02 UTC
Requires
- php: ^8.0.0
- illuminate/console: ^8.0.0 || ^9.0.0
- illuminate/database: ^8.0.0 || ^9.0.0
- illuminate/support: ^8.0.0 || ^9.0.0
- jackpopp/geodistance: ^1.2.0
- rinvex/countries: ^8.1
Requires (Dev)
- codedungeon/phpunit-result-printer: ^0.30.0
- illuminate/container: ^8.0.0 || ^9.0.0
- phpunit/phpunit: ^9.5.0
This package is auto-updated.
Last update: 2024-09-12 12:58:53 UTC
README
GrnSpc 地址 是一个多态的 Laravel 包,用于地址簿管理。您可以轻松地将地址添加到任何 eloquent 模型。
安装
-
通过 composer 安装此包
composer require grnspc/addresses
-
发布资源(迁移和配置文件)
php artisan grnspc:publish:addresses
-
使用以下命令执行迁移
php artisan grnspc:migrate:addresses
-
完成!
使用方法
要将地址支持添加到您的 eloquent 模型,只需使用 \Grnspc\Addresses\Traits\HasAddress
特性。
<?php namespace App\Models; use Grnspc\Addresses\Traits\HasAddresses; use Illuminate\Database\Eloquent\Model; class User extends Model { use HasAddresses; // ... }
向模型添加地址。
-
方法 1 - 通过 addAddress() 方法
此方法进行验证检查。
use App\Models\User; $user = User::find(1); $user->addAddress([ 'label' => 'Default Address', 'given_name' => 'Nathan', 'family_name' => 'Robinson', 'organization' => 'GrnSpc', 'line_1' => '117 Banff Ave', 'line_2' => null, 'city' => 'Banff', 'province' => 'Alberta', 'postal_code' => 'T1L 1A4', 'country_code' => 'ca', 'extra' => [ 'buzz_code' => '1234' ], 'latitude' => '51.1754012', 'longitude' => '-115.5715499', 'is_primary' => true, 'is_billing' => true, 'is_shipping' => true, ]);
-
方法 2 - 通过 Eloquent 关系
use App\Models\User; $user = User::find(1); $user->addresses()->create([ 'label' => 'Default Address', 'given_name' => 'Nathan', 'family_name' => 'Robinson', 'organization' => 'GrnSpc', 'line_1' => '117 Banff Ave', 'line_2' => null, 'city' => 'Banff', 'province' => 'Alberta', 'postal_code' => 'T1L 1A4', 'country_code' => 'ca', 'extra' => [ 'buzz_code' => '1234' ], 'latitude' => '51.1754012', 'longitude' => '-115.5715499', 'is_primary' => true, 'is_billing' => true, 'is_shipping' => true, ]);
-
方法 3 - 创建多个新地址
use App\Models\User; $user = User::find(1); $user->addresses()->createMany([ [...], [...], [...], ]);
在模型上更新地址
-
方法 1 - 通过 updateAddress() 方法
$address = $user->addresses()->first(); $newAttributes = [ 'label' => 'Default Work Address', ]; $user->updateAddress($address, $newAttributes);
-
方法 2 - 通过 Eloquent 关系
$address = $user->addresses()->first(); $address->update([ 'label' => 'Default Work Address', ]);
在模型上删除地址
删除单个地址
-
方法 1 - 通过 deleteAddress() 方法
$address = $user->addresses()->first(); $user->deleteAddress($address);
-
方法 2 - 通过 Eloquent 关系
$address = $user->addresses()->first(); $address->delete();
地址删除的另一种方法$user->addresses()->firstWhere('id', 123)->delete();
删除所有地址
-
方法 1 - 通过 flushAddress() 方法
$user->flushAddresses();
-
方法 2 - 通过 Eloquent 关系
$user->addresses()->delete();
地址外观
use Grnspc\Addresses\Facades\Address; $addresses = Address::all();
在模型上管理地址
API 直观且简单,让我们快速看一下
检查模型是否有地址
if ($user->hasAddresses()) { // Do something }
获取模型的所有地址
// Method 1 (Collection) $addresses = $user->addresses; // Method 2 (Collection) $addresses = $user->addresses()->get(); // Method 3 (Query Builder) $addresses = $user->addresses(); // if a model only has one address
获取模型的最新地址
// address in order: only1 > is_primary > latest $address = $user->address; // billing address in order: only1 > is_billing > latest $address = $user->billing_address; // shipping address in order: only1 > is_shipping > latest $address = $user->shipping_address;
范围和获取主要地址
// return all primary addresses $addresses = Address::isPrimary()->get() // return all primary addresses for a model $addresses = $user->addresses->isPrimary()->get();
范围和获取账单地址
// return all billing addresses $addresses = Address::isBilling()->get() // return all billing addresses for a model $addresses = $user->addresses->isBilling()->get();
范围和获取发货地址
// return all shipping addresses $addresses = Address::isShipping()->get() // return all shipping addresses for a model $addresses = $user->addresses->isShipping()->get();
按国家范围地址
// return all addresses in country $addresses = Address::InCountry('ca')->get()
在纬度/经度 51.1754012/-115.5715499 5 公里范围内查找所有地址
$fiveKmAddresses = User::findByDistance(5, 'kilometers', '51.1754012', '-115.5715499')->get(); // Alternative method to find users within certain radius $user = new \App\Models\User(); $users = $user->lat('51.1754012')->lng('-115.5715499')->within(5, 'kilometers')->get();
变更日志
请参阅 变更日志 以查看项目的完整历史。
贡献 & 协议
感谢您考虑为此项目做出贡献!贡献指南可在 CONTRIBUTING.md 中找到。
欢迎提交错误报告、功能请求和拉取请求。
安全漏洞
如果您在此项目中发现安全漏洞,请提交问题。所有安全漏洞都将得到及时处理。
许可
此软件在 MIT 许可证 (MIT) 下发布。
(c) 2014-2022 GrnSpc,部分权利保留。