---
title: "Vytváranie a úprava reklám — Advertisements for Laravel | Roundly"
description: "Vytvárajte reklamy z DTO AdvertisementData alebo presných tovární fromMinor() / fromDecimal(), priamo z požiadaviek, a upravujte len zadané polia."
url: https://roundly-consulting.com/sk/open-source/navody/advertisements-for-laravel/vytvaranie-reklam
language: sk
---

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

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

# Vytváranie a úprava reklám

Metódy create aj update prijímajú AdvertisementData. Povinný je len name; price je nepovinný RoundlyConsulting\\Money\\Money (reklama bez ceny odovzdá price: null alebo ho vynechá). Pri vytvorení je vynechaný argument jednoducho prázdny, pri úprave znamená „ponechať uloženú hodnotu“:

```php
use Illuminate\Support\Collection;
use RoundlyConsulting\Advertisements\DataTransferObjects\AdvertisementData;
use RoundlyConsulting\Advertisements\Facades\Advertisements;
use RoundlyConsulting\Money\Money;

$ad = Advertisements::create(new AdvertisementData(
    name: 'Vintage road bike',
    price: Money::ofMinor(25000, 'EUR'),  // 250.00 EUR
    category: $bikesCategory,             // a Category model, an id, or a slug — resolved to category_id
    description: 'Lightly used, great condition.',
    author: $user,                        // any Eloquent model (polymorphic author)
    meta: new Collection(['featured' => true]),
    publishedAt: now(),
    expiresAt: now()->addMonth(),
));                                       // → AdvertisementCreated
```

| Argument | Typ | Uloženie |
| --- | --- | --- |
| `name` | `string` | Povinné. Uloží sa pod aktívny jazyk a pre každý jazyk sa z neho vytvorí slug. |
| `price` | `?Money` | Suma v price (najmenšie jednotky), kód v currency. Pri reklame bez ceny ho vynechajte. |
| `category` | `Category\|int\|string\|null` | Model, id alebo slug, preložený na category\_id; neznámy slug znamená null. |
| `description` | `?string` | Uloží sa pod aktívny jazyk. |
| `author` | `?Model` | Ľubovoľný Eloquent model — polymorfný autor. |
| `meta` | `?Collection` | Ľubovoľné doplnkové údaje uložené ako JSON. |
| `publishedAt` | `?CarbonInterface` | published\_at. |
| `expiresAt` | `?CarbonInterface` | expires\_at. |

create() spustí AdvertisementCreated. Ak zadáte publishedAt, reklama bude od toho okamihu zverejnená (alebo naplánovaná) — accessor stavu aj scopy čítajú dátumy — no AdvertisementPublished spúšťa len publish(). Ak na tejto udalosti závisia listenery, zavolajte ho.

## Presné továrne na cenu

Alebo použite továreň, ktorá pomenúva jednotku a menu predvolí podľa default\_currency. Ani jedna neprijíma float:

```php
// Minor units (cents): an int or an integer string — wider than int64 is fine.
$data = AdvertisementData::fromMinor(name: 'Vintage road bike', minor: 25000);          // 250.00 EUR
$data = AdvertisementData::fromMinor(name: 'Bike', minor: '00199', currency: 'USD');    // 1.99 USD

// Decimal major units: exact, exponent-aware, never rounded.
$data = AdvertisementData::fromDecimal(name: 'Bike', amount: '1.10');                   // 110 cents
$data = AdvertisementData::fromDecimal(name: 'Bike', amount: '1500', currency: 'JPY');  // 1500 yen
AdvertisementData::fromDecimal(name: 'Bike', amount: '19.999');                         // throws RoundingNecessary

// A price-less ad: the constructor with no price
$data = new AdvertisementData(name: 'Free to a good home');
```

Obe prijímajú rovnaké voliteľné argumenty category, description, author, meta, publishedAt a expiresAt ako konštruktor.

## Z požiadavky

Validujte pravidlami balíka money a cenu načítajte cez Request::money() — JSON float (1.1) prevedie presne, zatiaľ čo (int) ceil($request->float('price') \* 100) uloží 1.10 ako 1.11:

```php
use RoundlyConsulting\Advertisements\DataTransferObjects\AdvertisementData;
use RoundlyConsulting\Money\Rules\{CurrencyCode, MoneyAmount};

$request->validate([
    'price'    => ['required', MoneyAmount::inCurrencyFrom('currency')->min('0')],
    'currency' => ['required', new CurrencyCode],
]);

// Preferred — JSON or form bodies:
$data = new AdvertisementData(
    name: (string) $request->string('name'),
    price: $request->money('price', currencyKey: 'currency'),
);

// Form-encoded input only (the value is already a string):
$data = AdvertisementData::fromDecimal(
    name: (string) $request->string('name'),
    amount: (string) $request->string('price'),
    currency: (string) $request->string('currency'),
);
```

## Úprava

```php
$ad = Advertisements::update($ad, new AdvertisementData(
    name: 'Vintage road bike (reduced)',
    price: Money::ofMinor(19900, 'EUR'),
));                                       // → AdvertisementUpdated
```

update() zmení len polia, ktoré odovzdáte. name je vždy povinné; každý vynechaný argument si ponechá uloženú hodnotu reklamy, takže zníženie ceny vyššie nezmení popis, kategóriu, meta, autora, umiestnenia ani dátumy publishedAt / expiresAt — a živá reklama zostane živá.

- Ak chcete pole vymazať, odovzdajte ho výslovne ako null: author: null odpojí autora, category: null zruší kategóriu, publishedAt: null vráti reklamu do konceptu.
- Rovnaké pravidlo platí aj pre voliteľné argumenty fromMinor() a fromDecimal().
- name a description sa zapíšu pod aktívny jazyk; ostatné jazyky si hodnoty ponechajú.
- Cena v inej mene reklamu prevedie do tejto meny (akcia najprv zapíše stĺpec currency); price: null vymaže sumu a currency ponechá.
- AdvertisementData::provides($field) povie, či bolo voliteľné pole odovzdané — výslovné null sa počíta.

```php
// Pass an argument as an explicit null to clear it
$ad = Advertisements::update($ad, new AdvertisementData(
    name: $ad->name,
    author: null,        // dissociates the author
    category: null,      // uncategorises the ad
    publishedAt: null,   // back to draft
));
```

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