adiazm/laravel-addresses

Laravel的简单地址和联系管理。

v1.2.3 2023-09-01 19:35 UTC

This package is auto-updated.

Last update: 2024-09-30 01:57:36 UTC


README

Latest Stable Version Total Downloads License

Laravel Addresses

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

安装

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

"require": {
	"adiazm/laravel-addresses": "^1.2"
}

并运行composer update,或者使用composer require adiazm/laravel-addresses一次性运行。

配置与迁移

php artisan vendor:publish --provider="Admsys\Countries\CountriesServiceProvider"
php artisan vendor:publish --provider="Adiazm\Addresses\AddressesServiceProvider"

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

php artisan countries:migration
php artisan migrate

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

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

使用方法

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

<?php namespace App\Models;

use Adiazm\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_billingis_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 Adiazm\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
]);

将地址与联系关联

最重要的是,addressescontacts可以通过可选的一对多关系连接。这样,您可以为地址分配多个联系,并像这样检索它们

use Adiazm\Addresses\Models\Address;

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

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

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

$contact = Contact::find(1);

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

变更日志

  • [2021-02-02] v1.0 现在默认将geocode配置选项设置为false
  • [2022-05-16] v1.1 更新依赖项至PHP 8和Laravel 8/9 - 对于旧版本,请参阅v1.0。

许可证

MIT许可证下发布。

作者

由亚历山大·曼弗雷德·波埃勒曼(Alexander Manfred Poellmann)在维也纳和罗马用爱手工制作。亚历山大·波埃勒曼