risetechapps/contact-for-laravel
Composer 安装命令:
composer require risetechapps/contact-for-laravel
包简介
README 文档
README
📌 Sobre o Projeto
O Laravel Contact é um package para Laravel que te possibilita criar multiplos contatos no mesmo registro.
🚀 Instalação
1️⃣ Requisitos
Antes de instalar, certifique-se de que seu projeto atenda aos seguintes requisitos:
- PHP >= 8.3
- Laravel >= 12
- Composer instalado
2️⃣ Instalação do Package
Execute o seguinte comando no terminal:
composer require risetechapps/contact-for-laravel
3️⃣ Configure seu Model
use RiseTechApps\Contact\Traits\HasContacts\HasContacts; class Client extends Model { use HasFactory, HasContacts; }
4️⃣ Rodar Migrations
php artisan migrate
📖 Uso
Nota: O trait
HasContactspode ser usado em qualquer model, com ou semSoftDeletes.
Campos do Contato
name- Nome do contatotelephone- Telefone fixocellphone- Celularemail- Emaildepartment- Departamento/Tipo (ex: comercial, suporte)is_primary- Define se é o contato principal (boolean)sort_order- Ordenação personalizada (inteiro)
Métodos Disponíveis no Trait
use RiseTechApps\Contact\Traits\HasContacts\HasContacts; class Client extends Model { use HasFactory, HasContacts; } // Obter contato principal $primaryContact = $client->getPrimaryContact(); // Obter contatos por departamento $comercialContacts = $client->getContactsByType('comercial'); // Verificar se existe email $hasEmail = $client->hasEmail('joao@exemplo.com'); // Verificar contato em campo específico $hasPhone = $client->hasContact('telephone', '11999999999');
Sincronizando Contatos
O método syncContacts() faz a sincronização completa dos contatos de um model em uma única chamada. Ele aceita tanto um array quanto um Illuminate\Http\Request — ideal tanto em controllers quanto em jobs/processamento em segundo plano.
// Lista de contatos direta $client->syncContacts([ ['name' => 'João', 'email' => 'joao@exemplo.com', 'cellphone' => '11999999999'], ['name' => 'Maria', 'email' => 'maria@exemplo.com', 'is_primary' => true], ]); // Com a chave 'contacts' $client->syncContacts(['contacts' => [...]]); // A partir do Request (busca em 'contacts' ou 'person.contacts') $client->syncContacts($request);
Comportamento da sincronização (incremental):
- Contato com
idexistente → atualiza (e restaura, se estiver soft-deleted) - Contato sem
id→ cria novo - Contatos ausentes no payload → removidos (soft delete)
- Garante automaticamente um único contato primário
- O
sort_orderé definido pela ordem dos itens no array
💡 Para preservar o histórico e os ids dos contatos existentes, envie o
idde cada contato no payload. Semid, um novo contato é criado.
Exemplo em job (segundo plano):
$client->syncContacts($data['contacts'] ?? []);
⚠️ Se o seu model usa
HasContacts, salvar o model (save()/update()) dispara oContactEvent, que também sincroniza contatos a partir do request. Ao usarsyncContacts()de forma explícita, evite enviar contatos pelo request/static no mesmo fluxo para não sincronizar duas vezes.
Relacionamento
// Todos os contatos ordenados por sort_order $client->contacts; // Apenas o contato principal $client->contacts()->primary()->first(); // Ordenados $client->contacts()->ordered()->get();
Contato Principal (Automático)
O sistema gerencia automaticamente o contato principal:
- Ao criar um contato: Se não existir nenhum contato primário para o model, ele automaticamente será marcado como primário
- Ao definir como primário: Se já existir um contato primário, o anterior perde automaticamente essa marcação
- Ao deletar o primário: Outro contato do mesmo model será promovido a primário automaticamente (respeitando
sort_orderecreated_at)
// Criar primeiro contato - automaticamente vira primário $client->contacts()->create(['name' => 'João', 'email' => 'joao@exemplo.com']); // Criar segundo como primário - o primeiro perde a marcação $client->contacts()->create([ 'name' => 'Maria', 'email' => 'maria@exemplo.com', 'is_primary' => true // João deixa de ser primário ]); // Deletar o primário - outro contato assume automaticamente $client->getPrimaryContact()->delete(); $novoPrimario = $client->fresh()->getPrimaryContact(); // Retorna outro contato
Histórico de Mudanças (Audit Log)
Todos os contatos possuem rastreamento automático de alterações:
// Obter histórico de um contato $history = $contact->histories; // Últimas 10 alterações $latest = $contact->latestHistory(10); // Filtrar por tipo de ação $updates = $contact->historiesForAction('updated'); // Quem criou o contato $creator = $contact->createdBy(); // Quem fez a última alteração $lastEditor = $contact->lastUpdatedBy(); // Verificar se um campo específico mudou foreach ($history as $record) { if ($record->fieldChanged('email')) { $oldEmail = $record->getOldValue('email'); $newEmail = $record->getNewValue('email'); } }
Configurar Campos Auditáveis (Opcional)
Por padrão, todos os campos fillable são auditados. Para personalizar:
class Contact extends Model { protected $auditable = ['name', 'email', 'telephone']; // apenas estes protected $auditGuard = 'web'; // guard alternativo }
🛠 Contribuição
Sinta-se à vontade para contribuir! Basta seguir estes passos:
- Faça um fork do repositório
- Crie uma branch (
feature/nova-funcionalidade) - Faça um commit das suas alterações
- Envie um Pull Request
📜 Licença
Este projeto é distribuído sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
💡 Desenvolvido por Rise Tech
risetechapps/contact-for-laravel 适用场景与选型建议
risetechapps/contact-for-laravel 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 250 次下载、GitHub Stars 达 0, 最近一次更新时间为 2025 年 02 月 11 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「laravel」 「contacts」 「risetechapps」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 risetechapps/contact-for-laravel 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 risetechapps/contact-for-laravel 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 risetechapps/contact-for-laravel 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
contacts
Laravel package for advanced media and upload management.
Generate sequential codes for Laravel Eloquent models with support for prefixes, reset patterns, and multiple database drivers
Repository pattern para Laravel com cache transparente, soft deletes, views materializadas (PostgreSQL), eventos e métricas de query.
统计信息
- 总下载量: 250
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 17
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2025-02-11