---
title: "Vytváranie a úprava podujatí — Events for Laravel | Roundly"
description: "Vytvárajte a zverejňujte podujatia cez builder alebo CreateEventData, potom ich upravujte, hľadajte, nastavujte plagáty, prevádzajte, mažte a obnovujte."
url: https://roundly-consulting.com/sk/open-source/navody/events-for-laravel/vytvaranie-podujati
language: sk
---

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

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

# Vytváranie a úprava podujatí

Events::make($title) vráti EventBuilder: create() uloží koncept, publish() podujatie vytvorí a zverejní v jednej transakcii. Stačí názov, organizátor a začiatok:

```php
use RoundlyConsulting\Events\Enums\AttendanceMode;
use RoundlyConsulting\Events\Enums\GuestList;
use RoundlyConsulting\Events\Enums\Visibility;
use RoundlyConsulting\Events\Facades\Events;

$event = Events::make(['en' => 'Jazz Night', 'sk' => 'Jazzový večer'])  // EventBuilder
    ->description(['en' => 'A live quartet.'])
    ->slug(['en' => 'jazz-night'])                 // optional manual slugs (strict: a taken one throws)
    ->organizedBy($user)                           // Model&Organizer
    ->coHostedBy($partnerTeam)
    ->at($venue)                                   // Venue, a venue id, or null
    ->online('https://meet.example.com/jazz')      // stored encrypted; managers and going attendees only
    ->attendanceMode(AttendanceMode::Mixed)        // else derived: venue → offline, link → online, both → mixed
    ->timezone('Europe/Bratislava')
    ->startsAt('2026-11-14 20:00')->duration('PT3H')   // or ->endsAt(), or ->allDay($from, through: $to)
    ->doorsOpenAt('2026-11-14 19:00')
    ->visibility(Visibility::Unlisted)             // or ->unlisted(), ->private()
    ->capacity(120)->maxGuests(2)->waitlist(true, autoPromote: true)
    ->rsvpWindow(opensAt: '2026-10-01 09:00', closesAt: '2026-11-14 18:00')
    ->guestList(GuestList::Attendees)->showCounts(true)
    ->category('jazz')->labels(['Live', 'Late night'])
    ->poster($upload)                              // UploadedFile, a local path, or draft: $token
    ->tier('Free entry', key: 'free')
    ->reminders(['P1D', 'PT2H'])
    ->meta(['source' => 'import'])
    ->by($user)                                    // checks create (and organizer approval)
    ->create();                                    // a draft — or ->publish(): create + publish in one transaction
```

Settery validujú hneď, kde to ide — časové pásmo, trvania, URL, hostia ≥ 0. Organizovanie za niekoho iného než aktéra, napríklad za tím, vyžaduje $organizer->allowsEventManagementBy($actor), inak InvalidOrganizerException. Všetky settery uvádza stránka Fasáda Events.

- Názov má najviac 255 znakov v každom jazyku (cez API 200), popis najviac 20 000 a odkaz na pripojenie najviac 2048 (http alebo https).
- Z názvov sa odstránia riadiace znaky; popisy si ponechajú zalomenia riadkov a tabulátory.
- Bez miesta konania a bez odkazu je podujatie offline s miestom, ktoré sa ešte ohlási. Inak sa spôsob účasti odvodí — miesto konania je offline, odkaz online, oboje mixed.
- Predvolené hodnoty pochádzajú z events.defaults.\*: viditeľnosť, hostia na RSVP, zoznam hostí, počty, čakacia listina (so zapnutým automatickým posúvaním), trvanie a časové pásmo.

## Cez DTO

```php
use RoundlyConsulting\Events\DataTransferObjects\CreateEventData;
use RoundlyConsulting\Events\DataTransferObjects\ScheduleData;
use RoundlyConsulting\Events\DataTransferObjects\TierData;
use RoundlyConsulting\Events\Facades\Events;

$event = Events::create(new CreateEventData(
    title: ['en' => 'Jazz Night'],
    organizer: $user,
    schedule: new ScheduleData(startsAt: '2026-11-14 20:00', duration: 'PT3H', timezone: 'Europe/Bratislava'),
    capacity: 120,
    tiers: [new TierData(name: 'Free entry', key: 'free')],
    actor: $user,
));
```

## Z modelu organizátora

```php
// OrganizesEvents: the builder with the organizer already set
$event = $team->organizeEvent(['en' => 'Hack night'])
    ->at($venue)
    ->startsAt('2026-12-03 18:00')
    ->by($user)                 // the team must allow $user (allowsEventManagementBy)
    ->publish();
```

## Úprava

```php
use RoundlyConsulting\Events\DataTransferObjects\UpdateEventData;
use RoundlyConsulting\Events\Enums\GuestList;

Events::for($event)->by($user)->edit()
    ->description(null)                      // null clears a nullable field
    ->doorsOpenAt('2026-11-14 19:00')
    ->guestList(GuestList::Attendees)
    ->showCounts(false)
    ->save();

Events::for($event)->by($user)->edit()->title('Renamed')->capacity(150)->save();
Events::for($event)->update(new UpdateEventData(capacity: 150, description: null));   // the DTO form
```

- Zmenia sa len zadané polia: každé pole UpdateEventData je predvolene NotGiven a null vymaže pole, ktoré môže byť prázdne. rsvpWindow() v editore zmení len zadané hranice; waitlist($on) nechá automatické posúvanie tak, ak nezadáte autoPromote:.
- Nový začiatok (alebo nový prvý deň celodenného podujatia) ohláseného podujatia sa odmietne s invalid\_event — použite reschedule(). Zopakovanie súčasného začiatku, ako to robí formulár, ktorý pošle späť všetky polia, je obyčajná úprava.
- Zmena začiatku, konca, príznaku celodenného podujatia, časového pásma, miesta konania, odkazu na pripojenie alebo spôsobu účasti zvýši SEQUENCE v kalendári a pri ohlásenom podujatí upozorní účastníkov so stavom going a held — ak nepoužijete silently().
- Vyššia kapacita alebo opäť zapnuté waitlistAutoPromote posunie čakaciu listinu. EventUpdated uvádza zmenené atribúty; keď sa nič nezmenilo, nespustí sa nič.

## Viditeľnosť

| Viditeľnosť | Kto ho vidí |
| --- | --- |
| `public` | Každý, keď je ohlásené. |
| `unlisted` | Ktokoľvek s odkazom cez uuid; findBySlug() len pre správcov, pozvaných a účastníkov. Nikdy v zoznamoch ani vo feedoch. |
| `private` | Správcovia, pozvaní (čakajúci alebo s prijatou pozvánkou) a každý s aktívnym RSVP. Nikdy v zoznamoch ani vo feedoch. |

Koncepty vidia len správcovia. Celú maticu a policy nájdete na stránke Súkromie a oprávnenia.

## Hľadanie a zoznamy

```php
Events::find($uuid);                         // live events only; no visibility rule — authorize view yourself
Events::findOrFail($uuid);                   // EventNotFoundException otherwise
Events::findBySlug('jazz-night', $viewer);   // along the locale chain; null for what $viewer may not see
Events::for($uuid);                          // a handle; an unknown or trashed uuid throws EventNotFoundException

Events::browse($viewer)->upcoming()->paginate();   // visible, listed (public), announced
Events::visibleTo($viewer)->get();                 // the policy's view as a query — managed drafts included
```

Slugy pre jednotlivé jazyky vznikajú z názvu a po nastavení sa nemenia, takže premenované podujatie si ponechá svoje odkazy. Sú unikátne v rámci jazyka vrátane zmazaných podujatí a pri kolízii dostanú poradovú príponu — ručný slug() nikdy: obsadený vyhodí výnimku. Pri zapnutom events.slugs.history staré slugy naďalej presmerúvajú. Route-model binding používa uuid, nikdy id ani slug.

## Plagát

```php
Events::for($event)->by($organizer)->poster($request->file('poster'));   // an UploadedFile or a local path
Events::for($event)->poster(draft: $token);    // media-library's upload-first flow
Events::for($event)->poster();                 // no file and no draft removes it

$event->poster;                  // ?Media
$event->posterUrl('card');       // the variant once generated, else the original, else events.poster.fallback_url
```

Skupina poster prijme jeden obrázok JPEG, PNG, WebP alebo AVIF do veľkosti events.poster.max\_kb a s rozmermi aspoň 600×315 — z povahy verejný, s variantmi webp vo fronte (thumb, card, square, landscape, wide). posterUrl() nikdy nevyhodí výnimku: kým variant nie je hotový, vráti originál, bez plagátu events.poster.fallback\_url. Spustí sa PosterChanged; trvalé zmazanie odstráni súbory plagátu a soft delete ich ponechá pre obnovenie.

## Prevod, zmazanie a obnovenie

```php
Events::for($event)->by($organizer)->transferTo($team, keepAsHost: true);
Events::for($event)->by($organizer)->delete();     // soft; refused while people are going (postpone or cancel first)
Events::for($event)->by($organizer)->restore();
Events::for($event)->delete(force: true);          // the row, its RSVPs, ticket types, co-hosts, invitations, tags and poster files
```

- transferTo() vyžaduje oprávnenie transfer — schválených používateľov organizátora alebo administrátora — a nového organizátora, ktorý aktéra povoľuje, ak aktér nie je administrátor. Pozrite Organizátori, spoluorganizátori a pozvánky.
- delete() je soft a odmietne sa (invalid\_event), kým ohlásené neskončené podujatie má ľudí so stavom going alebo s rezervovanými miestami — najprv ho odložte alebo zrušte. delete(force: true) sa riadi rovnakým pravidlom a odstráni riadok, aj zmazaný, spolu s jeho RSVP, typmi vstupeniek, spoluorganizátormi, pozvánkami, štítkami a súbormi plagátu.
- Zmazané podujatie je len na čítanie: každý zápis vyhodí EventTrashedException (409), kým ho neobnovíte cez restore(). Spustia sa EventDeleted (s $force) a EventRestored.

## 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/events-for-laravel.md)
