lecturize/laravel-addresses

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

v1.3.0 2023-09-21 15:43 UTC

This package is auto-updated.

Last update: 2024-08-28 15:01:24 UTC


README

Latest Stable Version Total Downloads License

Laravel Addresses

Laravel 的简单地址和联系人管理,带有自动地理编码以添加经度和纬度。

安装

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

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

并运行 $ composer update 或两者一起使用 $ composer require lecturize/laravel-addresses

配置 & 迁移

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

这将发布配置文件到 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
]);
将地址与联系人相关联

首先,addressescontacts 可以通过可选的一对多关系连接。这样,您可以为一个地址分配多个联系人,并按如下方式检索它们

$address = config('lecturize.addresses.model', \Lecturize\Addresses\Models\Address::class)::find(1);
$contacts = $address->contacts;

foreach ($contacts as $contact) {
    //
}
$contact = config('lecturize.contacts.model', \Lecturize\Addresses\Models\Contact::class)::find(1)
                  ->contacts()
                  ->first();
$contact = config('lecturize.contacts.model', \Lecturize\Addresses\Models\Contact::class)::find(1);

return $contact->address->getHtml();
地理编码

地址模型提供了一个名为 geocode 的方法,该方法将通过 Google Maps API 尝试获取经度和纬度。请确保您已在服务配置文件中添加了您的密钥 services.google.maps.key。如果将选项 lecturize.addresses.geocode 设置为 true,则包将在地址模型保存时自动触发 geocode 方法(确切地说,我们挂钩到 saving 事件)。

变更日志

  • [2021-02-02] v1.0 geocode 配置选项现在默认为 false
  • [2022-05-16] v1.1 更新了依赖项以支持 PHP 8 和 Laravel 8/9 - 对于旧版本,请参阅 v1.0。
  • [2023-02-21] v1.2 支持 Laravel 10。
  • [2023-09-21] v1.3 支持 addresses 和 contacts 的自定义模型,感谢 @bfiessinger。地理编码功能现在需要 Google Maps 密钥,请参阅上面的“地理编码”。此外,@bfiessinger 还添加了对标志的回退支持,有关更多信息,请参阅拉取请求 #40。
  • [进行中] v1.4 在地址表中添加了额外的联系字段,以便更容易独立使用(无需联系模型)。这旨在减少关系和查询的复杂性,例如以前生成从地址和联系人的运输标签时必要的复杂性。

许可证

遵循MIT许可证

作者

Alexander Manfred Poellmann在维也纳和罗马手工制作。