nh/addressable

将Laravel模型设置为可寻址

1.2.2 2022-10-26 12:05 UTC

This package is auto-updated.

Last update: 2024-09-26 16:18:27 UTC


README

通过composer安装包

composer require nh/addressable

发布地址数据库和模型

php artisan vendor:publish --tag=addressable

要使模型可寻址,请将Addressable特质添加到您的模型中

use Nh\Addressable\Traits\Addressable;

use Addressable;

/**
 * Default addressable type.
 * @var array
 */
protected $addressable = [
  'type' => null
];

视图

自动添加/更新地址

您可以添加单个地址 名称必须是address['field']

<input type="text" name="address[id]" />
<input type="text" name="address[type]" />
<input type="text" name="address[street_1]" />
<input type="text" name="address[street_2]" />
<input type="text" name="address[zip]" />
<input type="text" name="address[city]" />
<input type="text" name="address[state]" />
<input type="text" name="address[country]" />

或多个地址 名称必须是addresses['type']['field']

<input type="text" name="addresses[billing][id]" />
<input type="text" name="addresses[billing][street_1]" />
<input type="text" name="addresses[billing][street_2]" />
<input type="text" name="addresses[billing][zip]" />
<input type="text" name="addresses[billing][city]" />
<input type="text" name="addresses[billing][state]" />
<input type="text" name="addresses[billing][country]" />

模型

属性

您可以使用以下方式检索一个模型的所有地址

$user->addresses

或者您可以检索默认地址。 您必须在模型中添加默认地址类型

$user->address

或者您可以通过类型检索所有地址(或仅最后一个)

$user->addressesByType('billing')
$user->addressByType('billing')

并且您可以检索邮政地址的邮政格式

$user->address->postal

您可以检查一个模型是否有地址

$customer->hasAddresses() // Check if there any addresses
$customer->hasAddresses(false,'default') // Check if there any addresses with type 'default'
$customer->hasAddresses(true) // Check if there any addresses, even in the trash
$customer->hasAddresses(true,'default') // Check if there any addresses with type 'default', even in the trash

函数

添加一个地址

$user->setAddress(['type' => 'billing', 'street_1' => 'My streetname']);

添加多个地址

$user->setAddresses([
    'billing' => ['street_1' => 'My streetname for Billing'],
    'shipping' => ['street_1' => 'My streetname for Shipping'],
])

事件

您可以使用AddressEvent来派发发生到地址的事件。 您可以通过名称、父模型、地址模型(或null)和受影响地址的数量来传递

AddressEvent::dispatch('my-event', $model, $address, 1);