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

Trait HasAttributes

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

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():

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

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

Metódy na čítanie

MetódaVraciaÚčel
attachedAttributes()MorphManyRelácia k uloženým záznamom Attribute.
getAttachedAttributes()CollectionNázov → typovaná hodnota pre každý uložený atribút.
getAttachedAttribute($name)?AttributeJeden model Attribute alebo null.
getAttachedAttributeValue($name)mixedTypovaná hodnota alebo predvolená hodnota z definície.
getAttachedAttributeValueAsString($name)?stringHodnota v podobe uloženého reťazca.
hasAttachedAttribute($name)boolČi je atribút prítomný.
getAttachedAttributeMeta($name)?CollectionMetadáta atribútu.
attr($name)StoredAttributeValueTypovaný prístupový objekt s uplatnenými predvolenými hodnotami.
attributeInt / Float / Bool / Array / Date($name)?int … ?CarbonČítanie podľa typu.
history($name = null)CollectionZaznamenané revízie, najnovšie prvé.
attributeHistory($name = null)MorphManyRelácia k revíziám.

Metódy na zápis

MetódaTo 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

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.