承接 risetechapps/contact-for-laravel 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

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 HasContacts pode ser usado em qualquer model, com ou sem SoftDeletes.

Campos do Contato

  • name - Nome do contato
  • telephone - Telefone fixo
  • cellphone - Celular
  • email - Email
  • department - 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 id existente → atualiza (e restaura, se estiver soft-deleted)
  • Contato sem idcria 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 id de cada contato no payload. Sem id, 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 o ContactEvent, que também sincroniza contatos a partir do request. Ao usar syncContacts() 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_order e created_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:

  1. Faça um fork do repositório
  2. Crie uma branch (feature/nova-funcionalidade)
  3. Faça um commit das suas alterações
  4. 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 我们能提供哪些服务?
定制开发 / 二次开发

基于 risetechapps/contact-for-laravel 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 250
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 17
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2025-02-11