Skip to content

Contact (HasContact)

File: app/Traits/Common/HasContact.php

Trait Eloquent Laravel yang menghubungkan informasi kontak (telepon, WhatsApp, email, alamat, dll.) ke model manapun melalui tabel contacts terpusat — dengan dukungan untuk nilai kontak tunggal maupun ganda per tipe.

Ringkasan

Daripada menambahkan kolom phone, email, whatsapp ke setiap model yang butuh info kontak, trait HasContact menyimpan semua kontak di tabel master contacts dan mengelola relasi secara otomatis.

Dua mode:

ModeDeskripsiContoh
Direct ContactModel punya kolom kontak sendiri (phone_contact_id)School, Employee
Polymorphic ContactPakai relasi contacts() + ekstraksi pendingContactsModel tanpa kolom kontak dedicated

Kenapa Ada

  • Normalisasi: Semua data kontak di satu tabel contacts, tidak duplikasi antar model
  • Enkripsi: Nilai kontak bisa disimpan terenkripsi
  • Fleksibel: Dukungan untuk kontak tunggal (satu telepon) dan ganda (banyak nomor)
  • Otomatis: Set $model->phone = '08123456789' — trait handle lookup, creation, relationship

Konfigurasi

php
class School extends Model
{
    use HasContact;

    protected array $contacts = [
        'phone',
        'email',
        'whatsapp',
        'social_media' => ['multiple' => true],
    ];
}
FormatKolomRelasiKardinalitas
'phone'phone_contact_idphoneContact()Tunggal (BelongsTo)
'sosmed' => ['multiple' => true]sosmed_contact_idssosmedContacts()Ganda (HasMany-like)

Cara Pakai

php
// Set
$school->phone = '08123456789';
$school->email = 'info@sutomo.sch.id';
$school->social_media = ['@sutomo', '@sutomo_school'];
$school->save();

// Read
$school->phone;        // "08123456789"
$school->social_media; // ["@sutomo", "@sutomo_school"]

// Explicit
$school->getContactValue('phone');      // "08123456789"
$school->getContactValues('social_media'); // ["@sutomo", "@sutomo_school"]

File Penting

FileTujuan
app/Traits/Common/HasContact.phpTrait — attachment kontak, ekstraksi, relasi
app/Models/Platform/Contact/Contact.phpModel contacts — type, censored, encrypted
app/Models/Model mana pun yang pakai use HasContact