NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky
Contacts for Laravel

Synchronizácia kontaktov

Contacts::for($owner)->sync() je stavaný pre formulár „správa kontaktov“: odovzdajte mu úplný zoznam pre jeden druh a sám zistí, čo pridať, upraviť a odstrániť:

use RoundlyConsulting\Contacts\Facades\Contacts;
use RoundlyConsulting\Contacts\DataTransferObjects\ContactData;
use RoundlyConsulting\Contacts\Enums\ContactType;

$phones = Contacts::for($user)->sync(ContactType::Phone, [
    new ContactData(ContactType::Phone, '+421900000000', label: 'Mobile', isPrimary: true),
    new ContactData(ContactType::Phone, '+421900111222', label: 'Office'),
]);

$phones->pluck('position');   // [0, 1] — input order
  • Existujúce kontakty, ktorých normalizovaná hodnota sa zhoduje s položkou, sa upravia na mieste — popis, kategória, meta a pozícia; isPrimary: true kontakt povýši.
  • Položky bez zhody sa vytvoria cez akciu pridania (normalizácia, validácia, automatický primárny).
  • Existujúce kontakty daného druhu, ktoré v zozname chýbajú, sa soft-zmažú.
  • Ak je medzi zmazanými primárny kontakt a žiadna položka nežiada isPrimary, primárnym sa stane prvý synchronizovaný kontakt (auto_primary) — vrátená kolekcia to už zohľadňuje.
  • position zodpovedá poradiu vstupu a vrátená kolekcia toto poradie zachováva.
  • Každá zmena spustí vlastnú udalosť ContactAdded, ContactUpdated alebo ContactDeleted.

Každá položka sa uloží pod druhom odovzdaným do sync(), bez ohľadu na typ v DTO. Synchronizácia prázdneho zoznamu odstráni všetky kontakty daného druhu.

Z controllera

public function update(Request $request): RedirectResponse
{
    $validated = $request->validate([
        'phones' => ['array'],
        'phones.*.value' => ContactType::Phone->rules(),
        'phones.*.label' => ['nullable', 'string'],
    ]);

    Contacts::for($request->user())->sync(ContactType::Phone, array_map(
        fn (array $row) => new ContactData(ContactType::Phone, $row['value'], label: $row['label'] ?? null),
        $validated['phones'] ?? [],
    ));

    return back();
}

Prejavte lásku k open source

Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.

Ďalšie spôsoby podpory vrátane kryptomien

Odoslaním daru súhlasíte s našimi podmienkami prijímania darov.

Chcete to zabudovať do svojho produktu?

Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.