vendocrat/laravel-addresses

此包已废弃,不再维护。作者建议使用 lecturize/laravel-addresses 包。

为Laravel提供简单地址和联系人管理,自动地理编码以添加经纬度。使用Webpatser的著名Countries包。

v1.0.1 2021-04-13 10:23 UTC

This package is not auto-updated.

Last update: 2022-02-01 12:51:33 UTC


README

Latest Stable Version Total Downloads License

Laravel Addresses

为Laravel提供简单地址和联系人管理,具有自动地理编码功能以添加经纬度。使用Webpatser的著名Countries包。

安装

从您的composer.json文件中需要此包

"require": {
	"lecturize/laravel-addresses": "^1.0"
}

并运行$ composer update或同时运行$ composer require lecturize/laravel-addresses

配置 & 迁移

$ php artisan vendor:publish --provider="Webpatser\Countries\CountriesServiceProvider"
$ php artisan vendor:publish --provider="Lecturize\Addresses\AddressesServiceProvider"

这将发布一个config/countries.php,一个config/lecturize.php和一些迁移文件,您需要运行这些文件

$ php artisan countries:migration
$ php artisan migrate

为了确保迁移正确发布,请确保您已将目录database/migrations添加到项目composer.json中的类映射。

查看Webpatser\Countries的readme文件,了解如何将国家数据种子到您的数据库中。

使用方法

首先,将我们的HasAddresses特质添加到您的模型中。

<?php namespace App\Models;

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

class Post extends Model
{
    use HasAddresses;

    // ...
}
?>
将地址添加到模型中
$post = Post::find(1);
$post->addAddress([
    'street'     => '123 Example Drive',
    'city'       => 'Vienna',
    'post_code'  => '1110',
    'country'    => 'AT', // ISO-3166-2 or ISO-3166-3 country code
    'is_primary' => true, // optional flag
]);

或者您可以这样做...

$address = [
    'street'     => '123 Example Drive',
    'city'       => 'Vienna',
    'post_code'  => '1110',
    'country'    => 'AT', // ISO-3166-2 or ISO-3166-3 country code
    'is_primary' => true, // optional flag
];
$post->addAddress($address);

可用的属性有streetstreet_extracitypost_codestatecountrystatenotes(内部使用)。您还可以使用自定义标志如is_primaryis_billing & is_shipping。如果您已禁用包含的地理编码功能并希望手动添加它们,还可以传递lnglat

检查模型是否有地址
if ($post->hasAddresses()) {
    // Do something
}
获取模型的所有地址
$addresses = $post->addresses()->get();
获取主要/账单/配送地址
$address = $post->getPrimaryAddress();
$address = $post->getBillingAddress();
$address = $post->getShippingAddress();
更新模型中的地址
$address = $post->addresses()->first(); // fetch the address

$post->updateAddress($address, $new_attributes);
从模型中删除地址
$address = $post->addresses()->first(); // fetch the address

$post->deleteAddress($address); // delete by passing it as argument
从模型中删除所有地址
$post->flushAddresses();

联系人

首先,将我们的HasContacts特质添加到您的模型中。

<?php namespace App\Models;

use Lecturize\Addresses\Traits\HasContacts;
use Illuminate\Database\Eloquent\Model;

class Team extends Model
{
    use HasContacts;

    // ...
}
?>
将联系人添加到模型中
$post = Team::find(1);
$post->addContact([
    'first_name' => 'Alex',
    'website'    => 'https://twitter.com/AMPoellmann',
    'is_primary' => true, // optional flag
]);

将地址与联系人关联起来

首先,地址联系人可以通过可选的一对多关系进行连接。这样您可以为地址分配多个联系人,并像这样检索它们:

use Lecturize\Addresses\Models\Address;

$address = Address::find(1);
$contacts = $address->contacts;

foreach ($contacts as $contact) {
    //
}
use Lecturize\Addresses\Models\Address;

$contact = Address::find(1)
                  ->contacts()
                  ->first();
use Lecturize\Addresses\Models\Contact;

$contact = Contact::find(1);

return $contact->address->getHtml();

变更日志

  • [2021-02-02] v1.0 geocode配置选项现在默认为false

许可证

根据MIT许可证授权。

作者

亚历山大·曼弗雷德·波尔曼在维也纳和罗马精心制作。