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

Databázová schéma a model

Každý atribút je jeden riadok v jedinej polymorfnej tabuľke — žiadny stĺpec na atribút, žiadna migrácia pre nové pole. Názov tabuľky určuje table:

StĺpecTypPoznámka
idbigintAutoinkrementálny kľúč.
owner_type, owner_idmorph, nullableVlastniaci model. Typ owner_id určuje key_type.
namestringNázov atribútu.
valuetext, nullableUložený reťazec — JSON pre polia, ISO-8601 v UTC pre dátumy, šifrový text pri šifrovaní.
value_typestring, nullableHodnota AttributeType (predvolene string).
is_encryptedbooleanČi value obsahuje šifrový text.
unique_hashstring(64), nullable, uniqueHash hodnoty jedinečnej definície — pri šifrovaných hodnotách kľúčovaný slepý index; inak null. Pri serializácii modelu je skrytý.
metajsonb, nullableMetadáta, pretypované na Collection.
created_at, updated_at, deleted_attimestampsSoft deletes — odstránené záznamy sa dajú obnoviť až do prečistenia.

Tabuľka attributes má unikátny index na (owner_type, owner_id, name) — vrátane soft-deleted riadkov — takže vlastník má pre každý názov atribútu práve jeden riadok: pripojenie existujúceho názvu aktualizuje ten istý riadok a pripojenie odpojeného názvu obnoví jeho riadok s novou hodnotou aj metadátami. Vlastný unikátny index má aj unique_hash, vďaka čomu sú jedinečné definície zárukou databázy (pozrite Jedinečnosť, povinnosť a predvolené hodnoty). Tabuľka attribute_revisions (history.table) drží voliteľnú auditnú stopu s indexom na rovnakých troch stĺpcoch — pozrite História a auditná stopa.

Typ kľúča vlastníka

key_type určuje typ stĺpca owner_id v oboch tabuľkách, takže atribúty môžu patriť aj modelom s neceločíselnými kľúčmi. Všetky vaše modely vlastníkov musia mať rovnaký typ kľúča:

key_typeStĺpce vlastníkaPoužite, keď modely vlastníkov…
bigintnullableMorphspoužívajú predvolené autoinkrementálne kľúče Laravelu (predvolené; akceptuje sa aj alias id)
uuidnullableUuidMorphspoužívajú HasUuids
ulidnullableUlidMorphspoužívajú HasUlids

Nastavte ho pred spustením migrácií:

ATTRIBUTES_KEY_TYPE=uuid
use Illuminate\Database\Eloquent\Concerns\HasUuids;
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;
    use HasUuids; // pairs with ATTRIBUTES_KEY_TYPE=uuid
}

Na veľkosti písmen nezáleží. Nenastavený alebo prázdny kľúč znamená bigint; nerozpoznaná hodnota pri spustení migrácií vyhodí InvalidConfigurationException — nič sa nenahrádza.

Vlastný model atribútu

Nasmerujte attributes.model na vlastnú podtriedu, ak chcete pridať casty, scopy alebo udalosti modelu. Každé čítanie, zápis, scope, príkaz aj Attribute::collect() získava model cez tento kľúč:

// app/Models/CustomAttribute.php
namespace App\Models;

use RoundlyConsulting\Attributes\Models\Attribute;

class CustomAttribute extends Attribute
{
    protected static function booted(): void
    {
        parent::booted(); // keeps the package's unique-slot release on soft delete

        static::saved(function (self $attribute): void {
            // host-side model events, casts or scopes
        });
    }
}

// config/attributes.php
'model' => App\Models\CustomAttribute::class,

Trieda musí byť RoundlyConsulting\Attributes\Models\Attribute alebo jej podtrieda — čokoľvek iné vyhodí InvalidConfigurationException z toolkitu s názvom kľúča; cudzia trieda sa nikdy potichu nenahradí modelom z balíka. Podtrieda dedí vyhľadanie tabuľky z attributes.table, takže $table nenastavujete. Ak prepisuje booted(), zavolajte najprv parent::booted(): model z balíka cez ňu uvoľňuje jedinečnú hodnotu soft-deleted riadku.

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.