Typované hodnoty
Hodnoty si pri zápise aj čítaní zachovávajú skutočný PHP typ — bez ručného pretypovania:
use RoundlyConsulting\Attributes\Facades\Attributes;
$attributes = Attributes::for($product);
$attributes->set('color', 'white'); // string
$attributes->set('rating', 5); // int
$attributes->set('on_sale', true); // bool
$attributes->set('price', 9.99); // float
$attributes->set('tags', ['a', 'b']); // array
$attributes->set('published_at', now()); // datetime
$attributes->get('rating'); // int(5)
$attributes->get('on_sale'); // true
$attributes->get('published_at'); // CarbonImmutable, in the app timezone
// Model shorthand — the same manager underneath
$product->attachAttribute('rating', 5);
$product->getAttachedAttributeValue('rating'); // int(5)Ako sa typy ukladajú
Bez definície sa typ odvodí z PHP hodnoty, ktorú odovzdáte, a uloží sa do value_type vedľa hodnoty, ktorá sa drží ako text:
| PHP hodnota | value_type | Uloží sa ako | Prečíta sa ako |
|---|---|---|---|
| string (a všetko ostatné) | string | reťazec | string |
| int | integer | 5 → 5 ako text | int |
| float | float | najkratší text, ktorý sa prečíta ako presne ten istý float | float |
| bool | boolean | 1 alebo 0 | bool |
| array | array | JSON | array |
| DateTimeInterface | datetime | reťazec ISO-8601 v UTC | CarbonImmutable v časovom pásme aplikácie |
| null | string | SQL NULL (value_type je typ z definície, ak existuje) | null |
Dátumy sa normalizujú na UTC, takže jeden okamih má vždy jeden uložený reťazec, a vracajú sa ako ten istý okamih v časovom pásme aplikácie. Desatinné čísla si zachovajú plnú presnosť.
Typ určuje definícia
Ak existuje definícia, rozhoduje jej typ: hodnota sa podľa neho overí aj uloží, takže reťazec „5“ z requestu sa pri definícii integer uloží a prečíta ako int 5:
use RoundlyConsulting\Attributes\DataTransferObjects\AttributeDefinitionData;
use RoundlyConsulting\Attributes\Enums\AttributeType;
use RoundlyConsulting\Attributes\Facades\Attributes;
Attributes::define(new AttributeDefinitionData('rating', AttributeType::Integer));
Attributes::for($product)->set('rating', $request->input('rating')); // '5' from the request
Attributes::for($product)->get('rating'); // int(5) — stored in the defined typeEnum AttributeType
Podporované typy sú prípady enumu RoundlyConsulting\Attributes\Enums\AttributeType. Enum sprístupňuje aj odvodenie a prevod, ktoré balík interne používa:
use RoundlyConsulting\Attributes\Enums\AttributeType;
AttributeType::forValue(5); // AttributeType::Integer
AttributeType::forValue(now()); // AttributeType::DateTime
AttributeType::forValue('5'); // AttributeType::String_
AttributeType::Boolean->toStorage(true); // '1'
AttributeType::Array_->toStorage(['a']); // '["a"]'
AttributeType::Integer->fromStorage('42'); // 42
AttributeType::Float_->toStorage(0.1 + 0.2); // '0.30000000000000004' — full precision
AttributeType::DateTime->toStorage('2026-01-01 10:00:00+02:00'); // '2026-01-01T08:00:00+00:00' — UTC
AttributeType::Float_->isNumeric(); // true — integer and float are one familyPrejavte 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 kryptomienOdoslaní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.