---
title: "Špecifikácia (atribúty) — Shops for Laravel | Roundly"
description: "Typované, validované a filtrovateľné atribúty produktov cez attributes-for-laravel — definujte ich v konfigurácii a filtrujte či triedte katalóg."
url: https://roundly-consulting.com/sk/open-source/navody/shops-for-laravel/specifikacie
language: sk
---

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

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

# Špecifikácia (atribúty)

Produkty majú typovanú, validovanú špecifikáciu cez attributes-for-laravel — popisné údaje, ktoré dopĺňajú možnosti variantov (tie určujú SKU). Schému definujte v shops.attributes.definitions; každá položka má typ (string, integer, float, boolean, array, datetime) a voliteľne rules, default, required, unique a encrypted. Definície sa registrujú pri štarte:

```php
// config/shops.php
'attributes' => ['definitions' => [
    'material' => ['type' => 'string'],
    'weight'   => ['type' => 'integer', 'rules' => ['min:0']],
]],
```

## Zápis a čítanie hodnôt

```php
$product->attachAttribute('material', 'wool');
$product->attachAttribute('weight', 500);
$product->attachAttributes(['material' => 'wool', 'weight' => 320]);
$product->syncAttributes(['material' => 'cotton']);   // attach/replace, prune the rest
$product->detachAttribute('weight');

$product->attr('material')->string();   // 'wool'
$product->attr('weight')->int();        // 500
$product->attributeInt('weight');       // ?int
$product->validateAttributes();         // enforce the definitions' rules
$product->history('material');          // value-change history
```

## Filtrovanie a triedenie

Query scopes poslúžia na fazetové prehliadanie katalógu — len vlna, najľahšie ako prvé:

```php
Product::query()->whereAttribute('material', 'wool')->get();
Product::query()->whereAttributeIn('material', ['wool', 'cotton'])->get();
Product::query()->whereAttributeBetween('weight', 100, 500)->get();
Product::query()->whereHasAttribute('material')->get();
Product::query()->orderByAttribute('weight', 'desc')->get();
```

Definície sa pri štarte čítajú prísne: položka, ktorá nie je pole, preklep v type, príznak required, ktorý nie je boolean, alebo rules, ktoré nie sú pole, vyhodia InvalidConfigurationException s kľúčom balíka shops (napríklad shops.attributes.definitions.colour.type) namiesto toho, aby sa preskočili.

Každý zápis sa pred uložením overí voči definícii: hodnota, ktorá nevyhovie typu alebo pravidlám, vyhodí InvalidAttributeValueException a podrobnosti nesú jej attributeName, messages() a errorBag(). Ak zapnete attributes.strict balíka attributes, nedefinované názvy atribútov sa navyše odmietnu cez UnknownAttributeException.

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