NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky
Attributes for Laravel

Fasáda Attributes

Odporúčaným vstupným bodom je RoundlyConsulting\Attributes\Facades\Attributes. Attributes::for($owner) vráti handle atribútov daného vlastníka — všetky čítania aj zápisy na jednom mieste:

use RoundlyConsulting\Attributes\Facades\Attributes;

// Writes (validated against definitions, recorded in history, events fired)
Attributes::for($product)->set('color', 'red', meta: ['hex' => '#f00']);     // Attribute
Attributes::for($product)->set('color', 'blue');                              // new value, meta kept
Attributes::for($product)->setMany(['color' => 'red', 'size' => 'L']);        // Collection<Attribute>, keeps others
Attributes::for($product)->sync(['color' => 'red'], forceDelete: false);      // exactly this set
Attributes::for($product)->forget(['color'], forceDelete: false);             // int removed ('color' works too)
Attributes::for($product)->forgetExcept(['color']);                           // list<string> removed
Attributes::for($product)->meta('color', ['hex' => '#ff0000']);               // replace one attribute's meta (null clears)
Attributes::for($product)->stage()->set('color', 'red')->meta('color', ['hex' => '#f00'])->save(); // or ->sync()

// Reads
Attributes::for($product)->all();            // Collection<name, value>
Attributes::for($product)->toKeyValue();     // array<name, value>
Attributes::for($product)->keys();           // list<string>
Attributes::for($product)->get('color');     // value (or the defined default)
Attributes::for($product)->has('color');     // bool
Attributes::for($product)->history('color'); // Collection<AttributeRevision>, newest first

// Housekeeping
Attributes::prune(30);   // force-delete attributes trashed more than 30 days ago (default: config)

Zápisy sa overia voči definíciám, pri zapnutej histórii sa zaznamenajú a spúšťajú udalosti. setMany() a sync() prijímajú ako posledný argument voliteľnú mapu metadát podľa názvu (meta: ['color' => ['hex' => '#f00']]). Zápis hodnoty uložené metadáta atribútu ponechá, pokiaľ neodovzdáte nové; meta() ich nahradí a prejde prísnym režimom, históriou aj udalosťou AttributeAttached ako každý iný zápis.

Zápisy platia celé alebo vôbec: setMany(), sync() a stage()->save() overia každú hodnotu ešte pred prvým zápisom a bežia v jednej databázovej transakcii, takže neplatná hodnota či zlyhaný zápis nechá vlastníka presne v pôvodnom stave — nič sa neodpojí, nič sa nezapíše len napoly.

Handle vlastníka

Attributes::for($owner) vráti handle OwnerAttributes. Názvy sú vždy obmedzené na tohto vlastníka:

MetódaVraciaČo robí
set($name, $value = null, $meta = null)AttributePripojí alebo aktualizuje jeden atribút; meta je pole alebo Collection — bez nej uložené metadáta zostanú.
setMany(array $attributes, array $meta = [])Collection<int, Attribute>Pripojí alebo aktualizuje viacero, všetko alebo nič; ostatné atribúty zostanú.
sync(array $attributes, bool $forceDelete = false, array $meta = [])Collection<int, Attribute>Nastaví atribúty presne na túto množinu, všetko alebo nič.
forget(array|string $names, bool $forceDelete = false)intOdstráni atribúty; vráti ich počet.
forgetExcept(array $keep, bool $forceDelete = false)list<string>Odstráni všetky neponechané atribúty; vráti odstránené názvy.
meta($name, $meta)AttributeNahradí metadáta jedného atribútu (null ich vymaže) — cez prísny režim, históriu aj udalosti.
stage()AttributeWriterFluentný builder; save() → setMany(), sync() → sync().
all() / toKeyValue() / keys()Collection / array / list<string>Všetky uložené atribúty vlastníka.
get($name) / has($name)mixed / boolJedna typovaná hodnota (s predvolenou) / prítomnosť.
history(?string $name = null)Collection<int, AttributeRevision>Zaznamenané revízie, najnovšie prvé.

Metódy fasády

Metódy pre definície a validáciu delegujú na singleton AttributeRegistry — pozrite Definície a validácia:

MetódaVraciaČo robí
for(Model $owner)OwnerAttributesHandle vlastníka — všetky čítania a zápisy pre jeden model.
prune(?int $days = null)intNatrvalo vymaže atribúty zmazané pred viac ako $days dňami (predvolene prune_after_days).
define($definition) / defineMany(...$definitions)AttributesManagerZaregistruje globálne definície (reťaziteľné).
has($name) / get($name) / all()bool / ?AttributeDefinitionData / arrayČítanie globálnych definícií.
forget($name) / flush()AttributesManagerOdstráni jednu alebo všetky globálne definície — nie uložené hodnoty.
resolveFor(?$owner, $name) / definitionsFor($owner)definition(s)Definície podľa vlastníka — schéma modelu nad globálnou.
default($name, ?$owner = null)mixedDeklarovaná predvolená hodnota definície.
requiredNames()list<string>Názvy povinných globálnych definícií.
validate($name, $value) / validateFor(?$owner, $name, $value)voidVyhodí InvalidAttributeValueException.
assertUnique($owner, $name, $value)voidVyhodí DuplicateAttributeValueException.
isStrict() / assertKnown($name, ?$owner = null)bool / voidPrísny režim; assertKnown() vyhodí UnknownAttributeException (schéma modelu vlastníka sa počíta ako registrácia).
fake()AttributesFakeIba na fasáde — zaznamenávajúci fake (pozrite Testovanie).

Metódy modelu sú skratky

Trait HasAttributes ponecháva krátke metódy na modeli — attachAttribute(), syncAttributes(), $product->attributes() a ďalšie — pre tie isté operácie. Každá deleguje na Attributes::for($this), takže sa správa rovnako a Attributes::fake() ju zaznamená. Čítanie podľa typu (attr(), attributeInt() …) a query scopy sú len na modeli.

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

Odoslaním daru súhlasíte s našimi podmienkami prijímania darov.

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.