Hromadné operácie
Sentinel::model(Invoice::class) vráti handle ModelSeals, ktorý pracuje so všetkými riadkami modelu. Dopyt nad inou triedou modelu sa odmietne (SealingMisconfiguredException::queryModelMismatch).
$seals = Sentinel::model(Invoice::class);
$seals->scan(); // ScanReport: counts per status + findings
$seals->scan(where: fn ($query) => $query->where('tenant_id', 7)); // only these rows, chunked
$seals->scan(progress: fn (int $rows) => $bar->setProgress($rows)); // after every chunk
$seals->sealMissing(reason: 'Initial baseline'); // adopt rows that were never sealed
$seals->reseal(); // re-seal intact rows with the current key
$seals->reseal(acknowledgeReason: 'INC-90'); // …and acknowledge the others
$seals->resealWhere(fn ($query) => $query->where('status', 'draft'), reason: 'INC-91', actor: $admin);
$seals->updateAndReseal(
fn ($query) => $query->where('status', 'draft'), ['currency' => 'EUR'], reason: 'FIN-12 currency migration', actor: $admin,
);
$seals->unsealedQuery()->count(); // rows without a seal row
$seals->seals(); // ['financial', 'identity']Ploché tvary
Ploché tvary berú objekty volieb, ktoré nesú aj to, čo handle nemá — checkSchema pri skene a upgradeFormat pri prepečatení:
use RoundlyConsulting\Sentinel\DataTransferObjects\BaselineOptions;
use RoundlyConsulting\Sentinel\DataTransferObjects\ResealOptions;
use RoundlyConsulting\Sentinel\DataTransferObjects\ResealWhereRequest;
use RoundlyConsulting\Sentinel\DataTransferObjects\ScanOptions;
use RoundlyConsulting\Sentinel\DataTransferObjects\UpdateAndResealRequest;
Sentinel::scan(new ScanOptions([Invoice::class], seal: 'financial', limit: 10_000, checkSchema: true));
Sentinel::reseal(new ResealOptions(Invoice::class, onlyOutdated: true));
Sentinel::reseal(new ResealOptions(Invoice::class, upgradeFormat: true)); // rows of an older canonical format
Sentinel::resealWhere(new ResealWhereRequest(Invoice::class, fn ($query) => $query->where('tenant_id', 7), 'INC-91', $admin));
Sentinel::updateAndReseal(new UpdateAndResealRequest(Invoice::class, fn ($query) => $query->where('status', 'draft'), ['currency' => 'EUR'], 'FIN-12', $admin));
Sentinel::sealMissing(new BaselineOptions(Invoice::class, null, 'Initial baseline'));Prepečatenie nikdy nelegalizuje zmenu
reseal() (aj sentinel:reseal) každý riadok znovu overí pod jeho zámkom a prepečatí len riadky Intact alebo Outdated (udalosť rotated). Riadky už zapečatené aktuálnym kľúčom podľa aktuálnej definície ostanú bez zmeny. Každý iný stav sa preskočí a nahlási — pokiaľ nezadáte dôvod potvrdenia; vtedy sa každý potvrdí so zaznamenaným dôvodom a aktérom. Riadok, ktorý sa nedá zapečatiť, sa započíta ako failed; zamietnutie politikou potvrdenia beh zastaví. ResealReport má resealed, acknowledged, skipped, failed, skippedResults (najviac 1 000) a dryRun.
Zámerné hromadné aktualizácie
updateAndReseal() najprv v prechode len na čítanie overí každý vybraný riadok — akýkoľvek riadok, ktorý nie je neporušený, vyhodí TamperedModelException::many() a nič sa nezapíše. Potom pre každú dávku (predvolene 500) v jednej transakcii riadky zamkne, pod zámkom ich znovu overí (riadok zmenený medzitým dávku stále odmietne, medzitým zmazaný sa preskočí), spustí update($values) query buildera a každý riadok prepečatí s dôvodom.
Baseline
sealMissing() (aj sentinel:seal-missing --reason=…) zapečatí riadky bez riadku pečate a bez histórie v denníku (udalosť baseline, dôvod je povinný). Riadky s históriou, no bez riadku pečate, sa nahlásia ako seal_deleted a baseline nikdy nedostanú — zmazaná pečať je dôkaz.
where pri skene je closure, ktorá dostane dopyt modelu (bez globálnych scopes, rovnako ako pri celej tabuľke), alebo builder daného modelu; len filtruje, nikdy nemení poradie. reseal() a sealMissing() berú aj callback progress a dlhé príkazy v termináli zobrazia indikátor priebehu.
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.