---
title: "Trait HasAttributes — Attributes for Laravel | Roundly"
description: "Pridajte trait a kontrakt HasAttributes na akýkoľvek Eloquent model a získajte typované, dopytovateľné atribúty — plus prehľad metód."
url: https://roundly-consulting.com/sk/open-source/navody/attributes-for-laravel/trait-has-attributes
language: sk
---

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

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

# Trait HasAttributes

Pridajte trait HasAttributes a implementujte zodpovedajúci kontrakt na každom modeli, ku ktorému chcete pripájať atribúty:

```php
use Illuminate\Database\Eloquent\Model;
use RoundlyConsulting\Attributes\Contracts\HasAttributes as HasAttributesContract;
use RoundlyConsulting\Attributes\Traits\HasAttributes;

class Product extends Model implements HasAttributesContract
{
    use HasAttributes;
}
```

Funguje s akýmkoľvek Eloquent modelom — produkty, používatelia, objednávky, tikety. Atribúty sa viažu cez polymorfnú reláciu owner, takže jedna tabuľka slúži všetkým modelom.

## Relácia

Uložené riadky sprístupňuje relácia attachedAttributes() typu morph-many. Pozor na názov: attributes() je fluentný writer, nie relácia. Dopyty na reláciu vracajú AttributeCollection s pomocníkmi toKeyValue() a keyByName():

```php
$product->attachedAttributes;                        // AttributeCollection of Attribute models
$product->attachedAttributes()->where('name', 'color')->first();

Product::query()->with('attachedAttributes')->get();  // eager load for cheap reads
```

Riadok vytvorený priamo cez reláciu — $product->attachedAttributes()->create(\[...\]) — aj tak uloží hodnotu podľa definície názvu: v jej type, zašifrovanú, ak to definícia určuje, a s hashom jedinečnosti. Obchádza však Attributes::for() — bez prísneho režimu, pravidiel, histórie a udalostí — preto zapisujte cez fasádu alebo metódy modelu.

## Metódy na čítanie

| Metóda | Vracia | Účel |
| --- | --- | --- |
| `attachedAttributes()` | MorphMany | Relácia k uloženým záznamom Attribute. |
| `getAttachedAttributes()` | Collection | Názov → typovaná hodnota pre každý uložený atribút. |
| `getAttachedAttribute($name)` | ?Attribute | Jeden model Attribute alebo null. |
| `getAttachedAttributeValue($name)` | mixed | Typovaná hodnota alebo predvolená hodnota z definície. |
| `getAttachedAttributeValueAsString($name)` | ?string | Hodnota v podobe uloženého reťazca. |
| `hasAttachedAttribute($name)` | bool | Či je atribút prítomný. |
| `getAttachedAttributeMeta($name)` | ?Collection | Metadáta atribútu. |
| `attr($name)` | StoredAttributeValue | Typovaný prístupový objekt s uplatnenými predvolenými hodnotami. |
| `attributeInt / Float / Bool / Array / Date($name)` | ?int … ?Carbon | Čítanie podľa typu. |
| `history($name = null)` | Collection | Zaznamenané revízie, najnovšie prvé. |
| `attributeHistory($name = null)` | MorphMany | Relácia k revíziám. |

## Metódy na zápis

| Metóda | To isté ako Attributes::for($model)->… | Účel |
| --- | --- | --- |
| `attributes()` | `stage()` | Fluentný AttributeWriter na prípravu viacerých atribútov. |
| `attachAttribute($name, $value = null, $meta = null)` | `set()` | Pripojí alebo aktualizuje jeden atribút, voliteľne s metadátami. |
| `attachAttributes(array $attributes)` | `setMany()` | Pripojí alebo aktualizuje viacero atribútov z mapy názov → hodnota. |
| `syncAttributeMeta($name, $meta = null)` | `meta()` | Nahradí metadáta jedného atribútu. |
| `syncAttributes(array $attributes, $forceDelete = false)` | `sync()` | Zosúladí atribúty presne s danou množinou. |
| `detachAttribute($name, $forceDelete = false)` | `forget()` | Odstráni jeden atribút. |
| `detachAttributes(array $names, $forceDelete = false)` | `forget()` | Odstráni viacero atribútov. |
| `destroyAttributes(array $names, $forceDelete = false)` | `forget()` | Odstráni viacero atribútov (rovnaká cesta ako detachAttributes). |
| `destroyAttributesExcept(array $names, $forceDelete = false)` | `forgetExcept()` | Odstráni všetky atribúty okrem uvedených. |
| `validateAttributes()` | — (validácia v registri) | Overí prítomnosť povinných atribútov a platnosť hodnôt. |

Zapisovacie metódy sú len skratky, nie iná cesta: každá deleguje na Attributes::for($this), takže ich vidia prepísania v hostiteľskej aplikácii aj Attributes::fake(). Každá zapisovacia metóda vracia model, takže volania môžete reťaziť; každý príznak forceDelete predvolene znamená soft delete. Kontrakt vyžaduje attachedAttributes(), getAttachedAttributes(), getAttachedAttributeValue(), hasAttachedAttribute(), attr() a validateAttributes() — trait poskytuje všetky. Query scopy opisuje sekcia Query scopy.

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