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

Hromadné operácie a sync

Cez toMany() pripravte viac connectables a spustite nad všetkými jedno hromadné sloveso:

use RoundlyConsulting\Connections\Facades\Connections;

// Touch many targets in one call (each still emits its own event).
Connections::from($user)->toMany([$teamA, $teamB])->withPermissions('view')->connectAll();
Connections::from($user)->toMany($teams)->disconnectAll();
Connections::from($user)->toMany($teams)->grantAll('publish');
Connections::from($user)->toMany($teams)->revokeAll('publish'); // any status: pending, blocked, expired
  • connectAll() beží v jednej databázovej transakcii a vráti prepojenia; každá položka ide bežnou cestou vytvárania, takže eventy aj invalidácia cache fungujú správne.
  • disconnectAll() beží v jednej transakcii a connectables bez prepojenia preskočí.
  • grantAll() chýbajúce prepojenia vytvorí, rovnako ako grant(); bez argumentov použije pripravené oprávnenia.
  • revokeAll() odoberie oprávnenia každému cieľu s prepojením v ľubovoľnom stave — vrátane pending, blocked a expirovaných, takže odobraté oprávnenie sa po accept() či extend() nevráti. Ciele bez prepojenia alebo len so soft-deleted prepojením preskočí.
  • toMany() prijme akýkoľvek iterable — pole aj Eloquent kolekciu. Hromadné sloveso bez toMany() vyhodí MissingConnectable.

Zosúladenie presnej množiny

Connections::from($user)->sync() — alebo syncConnections() z traitu — funguje ako sync() v Eloquente: prepojí chýbajúce, odpojí nadbytočné a aktualizuje prienik, všetko v jednej transakcii — pri chybe sa vráti celé zosúladenie. Pravidlá stavov platia rovnako ako pri connect(). Vracia SyncResult:

use RoundlyConsulting\Connections\DataTransferObjects\SyncTarget;
use RoundlyConsulting\Connections\Facades\Connections;

// Reconcile to exactly this set: connect missing, disconnect extras, update overlap.
// Safe to repeat — a target detached earlier is revived, not re-inserted.
$result = Connections::from($user)->sync([$teamA, $teamC]);   // or $user->syncConnections([...])
$result->attached;  // list of newly connected (or revived) ids
$result->detached;  // list of disconnected ids
$result->updated;   // list of ids that already existed
$result->isEmpty(); // true when nothing was attached, detached or updated

// Per-target permissions, expiry or meta through SyncTarget DTOs. On an overlap, only what the
// target states changes: a plain model (or a null field) keeps the stored value, and the
// status is never touched.
Connections::from($user)->sync([
    new SyncTarget($teamA, permissions: ['view', 'edit']),
    new SyncTarget($teamB, ['publish'], now()->addDays(30)),
]);

Cieľom je samotný connectable alebo DTO SyncTarget — cez SyncTarget dáte jednému cieľu vlastné oprávnenia, expiráciu či meta:

use RoundlyConsulting\Connections\DataTransferObjects\SyncTarget;

new SyncTarget(
    model: $teamB,                       // required — a Connectable
    permissions: ['publish'],            // optional
    expiresAt: now()->addDays(30),       // optional CarbonInterface
    meta: ['source' => 'directory'],     // optional
);

Čo treba vedieť o sync

  • Sync zosúlaďuje všetky prepojenia, ktoré connector vytvoril, naprieč všetkými typmi connectable — prepojenia na modely, ktoré v zozname chýbajú, sa odpoja bez ohľadu na ich triedu. Odovzdajte kompletnú želanú množinu.
  • Pri prieniku sa zmení len to, čo cieľ uvádza: samotný model — alebo pole SyncTarget ponechané na null — zachová uložené oprávnenia, expiráciu aj meta a stav sa nikdy nemení.
  • Odpojené prepojenia sa soft-deletujú a spustia ConnectionRemoved. Ak jedno neskôr znova zosynchronizujete, oživí sa ako nové prepojenie a objaví sa v attached, takže sync môžete bezpečne opakovať.
  • Prázdny zoznam odpojí všetko, čo connector vytvoril.

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.