---
title: "Fluentný builder — Addresses for Laravel | Roundly"
description: "Vytvárajte adresy cez Addresses::for()->new() alebo newAddress() — čitateľná reťaz PendingAddress, ktorá neprepustí neúplnú adresu."
url: https://roundly-consulting.com/sk/open-source/navody/addresses-for-laravel/fluentny-builder
language: sk
---

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

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

# Fluentný builder

Addresses::for($model)->new() aj $model->newAddress() vracajú PendingAddress. Zreťazte polia a save() adresu uloží a vráti. Kódy krajín sa normalizujú automaticky a adresa bez type() dostane nakonfigurovaný default\_type:

```php
use RoundlyConsulting\Addresses\Enums\AddressType;
use RoundlyConsulting\Addresses\Facades\Addresses;

Addresses::for($payer)->new()
    ->type(AddressType::Office)
    ->name('HQ')
    ->primary()
    ->in('Bratislava')->at('Somewhere 1')->postalCode('81101')->country('sk')
    ->meta(['floor' => 3])
    ->save();

// or from the model
$payer->newAddress()
    ->type(AddressType::Home)
    ->in('Košice')->at('Main 2')->postalCode('04001')->country('SK')
    ->save();
```

## Metódy buildera

| Metóda | Účinok |
| --- | --- |
| `type(AddressType $type)` | Typ adresy — bez neho nakonfigurovaný default\_type. |
| `name(string $name)` | Voliteľný názov, napr. HQ; prázdny názov sa uloží ako null. |
| `in(string $city)` | Mesto — povinné. |
| `at(string $street)` | Ulica — povinná. |
| `postalCode(string $postalCode)` | PSČ — povinné. |
| `country(string $country)` | ISO kód krajiny — povinný; pri uložení sa normalizuje. |
| `primary(bool $isPrimary = true)` | Primárna adresa svojho typu; ostatným sa príznak zruší pri uložení, v tej istej transakcii. |
| `meta(iterable $meta)` | Ľubovoľné doplnkové údaje, zabalené do Collection a uložené ako JSON. |
| `save(): Address` | Overí štyri povinné polia, pridá adresu cez adresár vlastníka a vráti ju. |

## Povinné polia

Mesto, ulica, PSČ a krajina sú povinné. Ak zavoláte save() bez všetkých štyroch — alebo s prázdnou hodnotou — vyhodí sa IncompleteAddressException so zoznamom všetkých chýbajúcich polí:

```php
use RoundlyConsulting\Addresses\Exceptions\IncompleteAddressException;

try {
    $customer->newAddress()->in('Bratislava')->save();
} catch (IncompleteAddressException $e) {
    $e->getMessage();
    // 'The address is missing required field(s): [street, postalCode, country].'
}
```

## Čo robí save()

Nazbierané polia prejdú cez AddressData::make() — reťazce sa orežú, prázdny názov sa zmení na null, krajina sa normalizuje a chýbajúci typ nahradí default\_type — a save() výsledok pridá cez adresár vlastníka, takže ho vidí aj Addresses::fake(). CreateAddressAction vloží záznam cez polymorfný vzťah vlastníka a ak ste nastavili primary(), v tej istej transakcii ho povýši a ostatným adresám rovnakého typu príznak zruší. Potom sa odošle AddressCreated a pri povýšení aj PrimaryAddressChanged.

Addresses::for() prijme akýkoľvek Eloquent model — trait HasAddresses potrebujete len pre pomocníkov na strane modelu.

## Z requestu

```php
use App\Models\Customer;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;
use RoundlyConsulting\Addresses\Enums\AddressType;
use RoundlyConsulting\Addresses\Http\Resources\AddressResource;

final class CustomerAddressController
{
    public function store(Request $request, Customer $customer): AddressResource
    {
        $data = $request->validate([
            'type' => ['required', Rule::enum(AddressType::class)],
            'city' => ['required', 'string', 'max:255'],
            'street' => ['required', 'string', 'max:255'],
            'postal_code' => ['required', 'string', 'max:255'],
            'country' => ['required', 'string', 'min:2', 'max:3'],
            'primary' => ['boolean'],
        ]);

        $address = $customer->newAddress()
            ->type(AddressType::from($data['type']))
            ->in($data['city'])
            ->at($data['street'])
            ->postalCode($data['postal_code'])
            ->country($data['country'])            // 'sk' is stored as 'SK'
            ->primary($request->boolean('primary'))
            ->save();

        return AddressResource::make($address);
    }
}
```

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