---
title: "Úložiská kampaní — Campaigns for Laravel | Roundly"
description: "Kde kampane žijú — kontrakt CampaignStore, úložisko v pamäti a v databáze a pripojenie vlastného úložiska."
url: https://roundly-consulting.com/sk/open-source/navody/campaigns-for-laravel/manazer
language: sk
---

[Všetky balíky](https://roundly-consulting.com/sk/open-source.md)

[Campaigns for Laravel](https://roundly-consulting.com/sk/open-source/navody/campaigns-for-laravel.md)

# Úložiská kampaní

Úložisko slúži len na perzistenciu. Dávky, zmeny stavu a udalosti majú na starosti akcie, takže úložisko iba uchováva kampane a ich príjemcov. Nakonfigurované úložisko (konfigurácia: store, env CAMPAIGNS\_STORE) je v kontajneri zaregistrované ako Contracts\\CampaignStore — scoped, takže každý request či job vo fronte dostane vlastné — a pri čítaní vracia kópie — zmena vráteného objektu sa prejaví až po jeho uložení:

```php
use RoundlyConsulting\Campaigns\Contracts\CampaignStore;

// The configured store, as the actions see it (bound scoped — one per request or queued job):
$store = app(CampaignStore::class);

$store->find('e184d08f-5081-4fbb-9604-7a2460c3fb3a');         // ?Campaign — a copy
$store->recipients('e184d08f-5081-4fbb-9604-7a2460c3fb3a');   // Collection<int, CampaignRecipient>
$store->countRecipients('e184d08f-5081-4fbb-9604-7a2460c3fb3a'); // RecipientCounts: total, processed, failed
```

## Kontrakt

| Metóda | Účel |
| --- | --- |
| `find(string $campaignUuid): ?Campaign` | Uložená kampaň; null, ak neexistuje. |
| `all(int $offset = 0, int $limit = 10): Collection` | Stránka kampaní v poradí vytvorenia. |
| `insert(Campaign $campaign): bool` | Vloží novú kampaň; false — a nič sa nezapíše — ak je jej uuid obsadené, aj soft-deleted kampaňou. Musí ísť o jeden atomický krok. |
| `save(Campaign $campaign): void` | Vloží alebo aktualizuje kampaň podľa jej uuid. |
| `saveIfStatus(Campaign $campaign, CampaignStatus $expected): bool` | Uloží kampaň, len kým je uložený stav stále $expected — atomické compare-and-set, cez ktoré ide každá zmena stavu. Pre kampaň, ktorú úložisko nemá, vráti false. |
| `saveRecipients(string $campaignUuid, array $recipients): void` | Vloží alebo aktualizuje každého príjemcu podľa dvojice (kampaň, uuid) — ten istý príjemca uložený pod dvoma kampaňami zostane v oboch. |
| `recipients(string $campaignUuid, int $offset = 0, ?int $limit = null): Collection` | Príjemcovia kampane v poradí pridania; limit null vráti všetkých. |
| `findRecipient(string $campaignUuid, string $recipientUuid): ?CampaignRecipient` | Príjemca tejto kampane; príjemca inej kampane sa číta ako null. |
| `countRecipients(string $campaignUuid): RecipientCounts` | Príjemcovia spočítaní podľa výsledku — total, processed, failed — z čoho sa skladá priebeh. |

insert() (odmietne obsadené uuid) a saveIfStatus() (zapíše, len kým je uložený stav očakávaný) musia byť každá jedným atomickým krokom: práve vďaka nim sú duplicitné uuid a súbežné spustenia bezpečné.

## Dodávané úložiská

- Stores\\InMemoryCampaignStore (predvolené) — drží kampane v pamäti počas aktuálneho requestu, konzolového príkazu alebo jobu vo fronte. Ideálne pre testy a jednorazové odoslanie; potom nič nezostane.
- Stores\\DatabaseCampaignStore — ukladá kampane do modelov CampaignRecord a CampaignRecipientRecord. Pozrite si časť Databázové úložisko.

Obe prechádzajú rovnakou zdieľanou sadou kontraktových testov, takže sa správajú rovnako. Ak chcete kampane ukladať inam, implementujte Contracts\\CampaignStore a nastavte ho v konfigurácii — resolvuje sa z kontajnera, takže závislosti v konštruktore sa injektujú:

```php
// config/campaigns.php
'store' => \App\Campaigns\ApiCampaignStore::class, // implements Contracts\CampaignStore
```

Kód, ktorý kampane odosiela, s úložiskom priamo nepracuje — ide cez fasádu Campaigns, injektovaný CampaignManager alebo akcie (pozrite si časť DI a akcie).

## 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](https://roundly-consulting.com/sk/podporte-nas.md)

Odoslaním daru súhlasíte s našimi [podmienkami prijímania darov](https://roundly-consulting.com/sk/podmienky-darov.md).

[Podporte našu open-source prácu (otvorí sa v novej karte)](https://donate.stripe.com/dRmeVe8FX5PF1Qd9pXcEw00) [Pridajte sa k nám na Patreone (otvorí sa v novej karte)](https://www.patreon.com/cw/roundly)

## 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.

[Ponuka do 48 hodín](https://roundly-consulting.com/sk/kontakt.md) [Prezrieť všetky balíky](https://roundly-consulting.com/sk/open-source/navody/campaigns-for-laravel.md)
