grnspc/addressable 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

grnspc/addressable

Composer 安装命令:

composer require grnspc/addressable

包简介

Laravel Addressable is a polymorphic Laravel package, for addressbook management. You can add addresses to any eloquent model with ease.

README 文档

README

GrnSpc Addresses is a polymorphic Laravel package, for addressbook management. You can add addresses to any eloquent model with ease.

Installation

  1. Install the package via composer:

    composer require grnspc/addresses
  2. Publish resources (migrations and config files):

    php artisan grnspc:publish:addresses
  3. Execute migrations via the following command:

    php artisan grnspc:migrate:addresses
  4. Done!

Usage

To add addresses support to your eloquent models simply use \Grnspc\Addresses\Traits\HasAddress trait.

<?php 

namespace App\Models;

use Grnspc\Addresses\Traits\HasAddresses;
use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    use HasAddresses;

    // ...
}

Adding an Address to a Model.

  1. Method 1 - Via addAddress() Method

    This method does a valadation check.
    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. Method 2 - Via Eloquent Relationship

    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. Method 3 - Create multiple new addresses

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

Updating an Address on a Model

  1. Method 1 - Via updateAddress() Method

    $address = $user->addresses()->first();
    $newAttributes = [
        'label' => 'Default Work Address',
    ];
    $user->updateAddress($address, $newAttributes);
  2. Method 2 - Via Eloquent Relationship

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

Deleting an Address on a Model

Delete a Single Address

  1. Method 1 - Via deleteAddress() Method

    $address = $user->addresses()->first();
    
    $user->deleteAddress($address);
  2. Method 2 - Via Eloquent Relationship

    $address = $user->addresses()->first();
    $address->delete();
    Alternative way of address deletion
    $user->addresses()->firstWhere('id', 123)->delete();

Delete a All Address

  1. Method 1 - Via flushAddress() Method

    $user->flushAddresses();
  2. Method 2 - Via Eloquent Relationship

    $user->addresses()->delete();

Address Facade

use Grnspc\Addresses\Facades\Address;

$addresses = Address::all();

Manage your Addresses on Model

The API is intuitive and very straight forward, so let's give it a quick look:

Check if a Model has Addresses

if ($user->hasAddresses()) {
    // Do something
}

Get all Addresses for a Model

// 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

Get Latest Addresses for a Model

// 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;

Scoping and Getting Primary Addresses

// return all primary addresses
$addresses = Address::isPrimary()->get()

// return all primary addresses for a model
$addresses = $user->addresses->isPrimary()->get();

Scoping and Getting Billing Addresses

// return all billing addresses
$addresses = Address::isBilling()->get()

// return all billing addresses for a model
$addresses = $user->addresses->isBilling()->get();

Scoping and Getting Shipping Addresses

// return all shipping addresses
$addresses = Address::isShipping()->get()

// return all shipping addresses for a model
$addresses = $user->addresses->isShipping()->get();

Scoping Addresses by Country

// return all addresses in country
$addresses = Address::InCountry('ca')->get()

Find all addresses within 5 kilometers radius from the latitude/longitude 51.1754012/-115.5715499

$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();

Changelog

Refer to the Changelog for a full history of the project.

Contributing & Protocols

Thank you for considering contributing to this project! The contribution guide can be found in CONTRIBUTING.md.

Bug reports, feature requests, and pull requests are very welcome.

Security Vulnerabilities

If you discover a security vulnerability within this project, please submit an issue. All security vulnerabilities will be promptly addressed.

License

This software is released under The MIT License (MIT).

(c) 2014-2022 GrnSpc, Some rights reserved.

统计信息

  • 总下载量: 400
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 5
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2021-06-14

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固