nh / addressable
将Laravel模型设置为可寻址
1.2.2
2022-10-26 12:05 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);