Primárne kontakty a poradie
Každý vlastník má vždy najviac jeden primárny kontakt pre každý druh. Pri zapnutom auto_primary (predvolene) si druh, ktorý má kontakty, primárny aj udrží: stane sa ním prvý pridaný, a keď primárny kontakt zmažete, odstránite synchronizáciou alebo presuniete do iného druhu, povýši sa ďalší podľa poradia. Označenie iného kontaktu ako primárneho zosadí predchádzajúci v rámci databázovej transakcie:
$first = $user->addEmail('[email protected]'); // first email: primary automatically
$second = $user->addEmail('[email protected]', primary: true);
$first->fresh()->is_primary; // false — demoted in the same transaction
$second->fresh()->is_primary; // true
$phone = $user->addPhone('+421900000000'); // each kind keeps its own primary
$phone->is_primary; // true
Contacts::setPrimary($first); // promote again; fires PrimaryContactChanged
Contacts::delete($first); // the primary leaves its kind...
$second->fresh()->is_primary; // true — ...and the next by position takes over- Primárne kontakty sa určujú podľa vlastníka a surového druhu — email, phone aj každý registrovaný vlastný druh má svoj.
- Kontakty bez vlastníka zdieľajú medzi sebou jeden primárny kontakt na druh.
- PrimaryContactChanged sa spustí s novým primárnym kontaktom a so zosadeným (alebo null) — aj pri automatickom povýšení.
- Pri vypnutom auto_primary sa za vás nič nepovyšuje.
- Obnovený primárny kontakt sa vráti ako sekundárny, ak medzitým jeho druh povýšil iný kontakt.
- Pri zapnutom require_owner_for_primary vyhodí povýšenie kontaktu bez vlastníka PrimaryContactConflict a druhy bez vlastníka sa automaticky nepovyšujú.
Poradie
Každý kontakt má v rámci svojho druhu pozíciu. Nové kontakty dostanú ďalšie voľné miesto (od 0), pokiaľ ho ContactData nenastaví explicitne; sync() priraďuje pozície podľa poradia vstupu:
$user->addPhone('+421900000001'); // position 0
$user->addPhone('+421900000002'); // position 1 — next free slot within the kind
// Pin a position explicitly
$user->addContact(new ContactData(ContactType::Phone, '+421900000003', position: 0));
$user->contactsOfType(ContactType::Phone); // ordered by position, then id
Contact::query()->forOwner($user)->ordered()->get();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 kryptomienOdoslaní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.