risetechapps/address-for-laravel
Composer 安装命令:
composer require risetechapps/address-for-laravel
包简介
关键字:
README 文档
README
Laravel Address é um pacote para Laravel que permite gerenciar diferentes tipos de endereços (padrão, entrega e cobrança) associados aos seus models de forma simples e eficiente.
📦 Instalação
✅ Requisitos
- PHP >= 8.3
- Laravel >= 12
- Composer
⚙️ Passo a Passo
- Instale o package via Composer:
composer require risetechapps/address-for-laravel
- Adicione as traits ao seu model:
use RiseTechApps\Address\Traits\HasAddress\HasAddress; use RiseTechApps\Address\Traits\HasAddress\HasAddressBilling; use RiseTechApps\Address\Traits\HasAddress\HasAddressDelivery; class Client extends Model { use HasFactory, HasAddress, HasAddressDelivery, HasAddressBilling; }
- Execute as migrations:
php artisan migrate
✨ Funcionalidades
- 🏷 Address: Endereço padrão para qualquer model.
- 🏷 Address Delivery: Suporte a múltiplos endereços de entrega.
- 🏷 Address Billing: Suporte a múltiplos endereços de cobrança.
💡 Exemplos de Uso
Criar um endereço padrão (manual)
$client = Client::find(1); $client->address()->create([ 'street' => 'Rua Exemplo', 'number' => '123', 'city' => 'São Paulo', 'state' => 'SP', 'zipcode' => '01234-567', ]);
Criar via sync (recomendado para APIs)
// Sincroniza automaticamente a partir do request $client->syncAddress($request->all()); // Com array manual $client->syncAddress([ 'person' => [ 'name' => 'João', 'address' => [ 'street' => 'Rua Principal', 'number' => '100', 'city' => 'São Paulo', 'state' => 'SP', 'zipcode' => '01000-000' ] ] ]);
Adicionar endereço de cobrança
// Manual $client->addressBilling()->create([ 'street' => 'Rua da Cobrança', 'number' => '789', 'city' => 'Ribeirão Preto', 'state' => 'SP', 'zipcode' => '14000-000', ]); // Via sync (suporta múltiplos) $client->syncAddressBilling([ 'address_billing' => [ ['street' => 'Rua A', 'number' => '1'], ['street' => 'Rua B', 'number' => '2'], ] ]);
Adicionar endereço de entrega
// Manual $client->addressDelivery()->create([ 'street' => 'Av. das Entregas', 'number' => '456', 'city' => 'Campinas', 'state' => 'SP', 'zipcode' => '13000-000', ]); // Via sync (suporta múltiplos) $client->syncAddressDelivery([ 'address_delivery' => [ ['street' => 'Av. A', 'number' => '100'], ['street' => 'Av. B', 'number' => '200'], ] ]);
Definir endereço principal (default)
$address = $client->addressBilling()->create([...]); $address->setAsDefault(); // Ou buscar o endereço padrão $defaultBilling = $client->billingAddressDefault(); $defaultDelivery = $client->deliveryAddressDefault(); $defaultAddress = $client->address; // Relação morphOne
📊 Histórico de Uso
Rastreie quantas vezes cada endereço foi utilizado:
// Registrar uso de um endereço $address->incrementUsage(); $address->incrementUsage('delivery', ['order_id' => 123]); // Ver contador $address->usage_count; // 15 $address->last_used_at; // 2025-04-27 14:30:00 // Endereços mais usados Address::mostUsed(10)->get(); $client->mostUsedBillingAddresses(5); $client->mostUsedDeliveryAddress(); // O mais usado $client->mostUsedBillingAddress(); // O mais usado // Scopes úteis Address::mostUsed()->get(); // Ordenado por uso Address::recentlyUsed(30)->get(); // Usados nos últimos 30 dias Address::neverUsed()->get(); // Nunca usados Address::usedMoreThan(10)->get(); // Mais de 10 vezes // Logs detalhados $address->usageLogs()->get(); $address->usageLogs()->byAction('delivery')->get(); $address->usageLogs()->lastDays(7)->get();
🔧 Sincronizando Endereços
Os métodos sync* buscam automaticamente o endereço nos dados, suportando múltiplos formatos de payload:
Endereço Padrão (syncAddress)
$client->syncAddress($data); // Busca em 'address' ou 'person.address'
Payloads suportados:
// Formato 1: person.address { "person": { "name": "João", "address": { "street": "Rua Principal", "number": "100" } } } // Formato 2: address direto { "address": { "street": "Rua Principal", "number": "100" } } // Formato 3: array do endereço diretamente { "street": "Rua Principal", "number": "100" }
Endereço de Cobrança (syncAddressBilling)
$client->syncAddressBilling($data); // Busca em 'address_billing' ou 'person.address_billing'
Aceita múltiplos endereços:
{
"person": {
"address_billing": [
{ "street": "Rua da Fatura", "number": "200" },
{ "street": "Rua Secundária", "number": "300" }
]
}
}
Endereço de Entrega (syncAddressDelivery)
$client->syncAddressDelivery($data); // Busca em 'address_delivery' ou 'person.address_delivery'
Exemplo completo no Controller:
public function update(Request $request) { $client = $request->user(); $data = $request->validated(); // Atualiza dados básicos $client->update($data['person']); // Sincroniza endereços (busca automaticamente nos lugares certos) $client->syncAddress($data); $client->syncAddressBilling($data); $client->syncAddressDelivery($data); // Recarrega relacionamentos para retornar na resposta $client->load(['address', 'addressBilling', 'addressDelivery']); return response()->json($client); }
🔍 Scopes de Consulta
O pacote inclui diversos scopes para facilitar consultas:
// Buscar por estado Address::byState('SP')->get(); // Buscar por cidade Address::byCity('São Paulo')->get(); // Buscar por CEP Address::byZipCode('01310-100')->first(); // Buscar por país Address::byCountry('BR')->get(); // Buscar por bairro Address::byDistrict('Centro')->get(); // Combinar scopes Address::byState('SP')->byCity('São Paulo')->byDistrict('Jardins')->get(); // Buscar endereços padrão Address::default()->get();
📝 Histórico de Alterações
Todas as alterações em endereços são automaticamente registradas:
// Ver histórico de um endereço $history = $address->history()->get(); // Última alteração $latest = $address->latestHistory(); // Filtrar por tipo de ação $createdEntries = $address->history()->created()->get(); $updatedEntries = $address->history()->updated()->get(); $deletedEntries = $address->history()->deleted()->get(); // Ver mudanças específicas foreach ($history as $entry) { echo $entry->description; // "Endereço atualizado" print_r($entry->changes); // ['city' => ['old' => 'SP', 'new' => 'RJ']] }
O histórico inclui:
- Ação: created, updated, deleted, restored
- Valores antigos e novos
- IP e User Agent do usuário
- ID do usuário que fez a alteração
- Data/hora da alteração
📋 Campos do Endereço
Campos disponíveis para todos os tipos de endereço:
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
zip_code |
string | Sim | CEP |
country |
string | Sim | País (ex: BRA) |
state |
string | Sim | Estado/Província |
city |
string | Sim | Cidade |
district |
string | Sim | Bairro |
address |
string | Sim | Logradouro |
number |
string | Sim | Número |
complement |
string | Não | Complemento |
Nota: Campos vazios ou nulos são automaticamente filtrados pelo método sync*.
🤝 Como Contribuir
Contribuições são super bem-vindas! Para colaborar:
- Faça um fork do repositório
- Crie uma branch com sua feature (
feature/nome-da-feature) - Faça o commit das suas alterações
- Envie um Pull Request
📄 Licença
Este projeto é licenciado sob a licença MIT. Consulte o arquivo LICENSE para mais detalhes.
💡 Autor
Desenvolvido com 💙 por Rise Tech
risetechapps/address-for-laravel 适用场景与选型建议
risetechapps/address-for-laravel 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 464 次下载、GitHub Stars 达 0, 最近一次更新时间为 2025 年 05 月 23 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「address」 「risetechapps」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 risetechapps/address-for-laravel 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 risetechapps/address-for-laravel 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 risetechapps/address-for-laravel 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Maps in minutes. Powered by the Google Maps API.
Redirects TYPO3 visitors automatic or with a suggestlink to another language and/or root page.
Module adding custom shipping attribute for what3words address
A modern, feature-rich Laravel package for managing addresses with geocoding, validation, caching, and spatial operations. Perfect for e-commerce, CRM systems, and any application requiring robust address management.
This package provides an Address Model, Migration and Factory. It also provides the traits HasBillingAddres and HasPublicAddress
统计信息
- 总下载量: 464
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 18
- 依赖项目数: 1
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2025-05-23