grnspc/addressable

Laravel Addressable 是一个多态的 Laravel 包,用于地址簿管理。您可以轻松地将地址添加到任何 eloquent 模型。

v2.0.1 2022-01-28 00:02 UTC

This package is auto-updated.

Last update: 2024-09-12 12:58:53 UTC


README

GrnSpc 地址 是一个多态的 Laravel 包,用于地址簿管理。您可以轻松地将地址添加到任何 eloquent 模型。

安装

  1. 通过 composer 安装此包

    composer require grnspc/addresses
  2. 发布资源(迁移和配置文件)

    php artisan grnspc:publish:addresses
  3. 使用以下命令执行迁移

    php artisan grnspc:migrate:addresses
  4. 完成!

使用方法

要将地址支持添加到您的 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. 方法 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. 方法 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. 方法 3 - 创建多个新地址

    use App\Models\User;
    
    $user = User::find(1);
    $user->addresses()->createMany([
        [...],
        [...],
        [...],
    ]);

在模型上更新地址

  1. 方法 1 - 通过 updateAddress() 方法

    $address = $user->addresses()->first();
    $newAttributes = [
        'label' => 'Default Work Address',
    ];
    $user->updateAddress($address, $newAttributes);
  2. 方法 2 - 通过 Eloquent 关系

    $address = $user->addresses()->first();
    $address->update([
        'label' => 'Default Work Address',
    ]);

在模型上删除地址

删除单个地址

  1. 方法 1 - 通过 deleteAddress() 方法

    $address = $user->addresses()->first();
    
    $user->deleteAddress($address);
  2. 方法 2 - 通过 Eloquent 关系

    $address = $user->addresses()->first();
    $address->delete();
    地址删除的另一种方法
    $user->addresses()->firstWhere('id', 123)->delete();

删除所有地址

  1. 方法 1 - 通过 flushAddress() 方法

    $user->flushAddresses();
  2. 方法 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,部分权利保留。