---
title: "Typy kľúčov a schémové makrá — Package Toolkit for Laravel | Roundly"
description: "Jedna stratégia kľúčov bigint/uuid/ulid riadená konfiguráciou s makrami ownerKey(), morphKey(), polymorphicSubject() a auditable()."
url: https://roundly-consulting.com/sk/open-source/navody/package-toolkit-for-laravel/typy-klucov
language: sk
---

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

[Package Toolkit for Laravel](https://roundly-consulting.com/sk/open-source/navody/package-toolkit-for-laravel.md)

# Typy kľúčov a schémové makrá

Schéma balíka zamrzne jeho prvým vydaním, preto sa typ kľúča modelov, na ktoré balík odkazuje, nastavuje vopred a nie je pevne bigint — popri predvolenom autoinkrementálnom kľúči sú podporované aj modely s UUID a ULID. KeyType zistí voľbu hostiteľa z konfigurácie:

```php
// config/comments.php
return [
    'key_type' => 'bigint',   // bigint | uuid | ulid (or a KeyType case) — match the host's models
];
```

```php
use RoundlyConsulting\PackageToolkit\Enums\KeyType;

KeyType::fromConfig('comments.key_type');                  // KeyType::BigInt | KeyType::Uuid | KeyType::Ulid; 'uiid' throws
KeyType::fromConfig('comments.key_type', KeyType::Ulid);   // a different default for a key that is not set (absent, null, blank)

// config('comments.key_type') === 'uiid' — a typo
// throws InvalidConfigurationException:
// Configuration value [comments.key_type] must be one of [bigint, uuid, ulid] (case-insensitive), [uiid] given.

KeyType::fromValue('UUID');   // KeyType::Uuid — trimmed, case-insensitive
KeyType::fromValue('nope');   // KeyType::BigInt — a raw string still falls back silently
```

| Hodnota v konfigurácii | Prípad | Stĺpce |
| --- | --- | --- |
| `'bigint'` | `KeyType::BigInt` | unsignedBigInteger / numericMorphs |
| `'uuid'` | `KeyType::Uuid` | uuid / uuidMorphs |
| `'ulid'` | `KeyType::Ulid` | ulid / ulidMorphs |
| Prípad KeyType | Tento prípad bez zmeny | — |
| Chýba, null alebo prázdna ('' / len medzery) | Predvolená hodnota (KeyType::BigInt, ak neodovzdáte inú) | — |
| Čokoľvek iné ('uiid', false, celé číslo) | Vyhodí InvalidConfigurationException | — |

fromConfig() prijme prípad KeyType alebo jeho reťazcovú hodnotu — orezanú a porovnanú bez ohľadu na veľkosť písmen. Nenastavený kľúč — chýbajúci, null alebo prázdny ('' či len medzery) — sa číta ako predvolená hodnota (bigint alebo KeyType, ktorý odovzdáte ako druhý argument). Akákoľvek iná hodnota, napríklad preklep 'uiid', vyhodí InvalidConfigurationException namiesto toho, aby pre hostiteľa s UUID kľúčmi potichu vytvorila stĺpce bigint. fromValue() mapuje surový reťazec rovnako, no pri nerozpoznanej hodnote sa stále vráti k predvolenej — používajte ju pre hodnoty, ktoré nepochádzajú z konfigurácie.

## Schémové makrá

Makrá zaregistrujte cez RegistersBlueprintMacros (pozrite Voliteľné traity) a používajte ich v migráciách:

```php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use RoundlyConsulting\PackageToolkit\Enums\KeyType;

$type = KeyType::fromConfig('comments.key_type'); // KeyType::BigInt | KeyType::Uuid | KeyType::Ulid; 'uiid' throws

Schema::create('comments', function (Blueprint $table) use ($type): void {
    $table->id();
    $table->ownerKey('author_id', $type);              // FK column of the right type, indexed
    $table->morphKey('subject', $type);                // subject_type / subject_id morph pair (+ index)
    $table->polymorphicSubject('target', $type, true); // nullable morph pair
    $table->auditable();                               // timestamps() + softDeletes()
});
```

| Makro | Výsledok |
| --- | --- |
| `ownerKey(string $name, KeyType $type, bool $nullable = false, bool $index = true)` | Jeden stĺpec cudzieho kľúča (unsignedBigInteger / uuid / ulid), voliteľne nullable a s indexom. Vracia ColumnDefinition. |
| `morphKey(string $name, KeyType $type, bool $nullable = false)` | Správna dvojica numericMorphs / uuidMorphs / ulidMorphs (+ nullable varianty) — <name>\_type a <name>\_id so zloženým indexom. Schema::morphUsingUuids() ani morphUsingUlids() v hostiteľskej aplikácii ju nezmení. |
| `polymorphicSubject(string $name, KeyType $type, bool $nullable = false)` | Dvojica stĺpcov polymorfného subjektu — morph konvencia pod doménovo zrozumiteľným názvom. |
| `auditable()` | timestamps() + softDeletes(). |

ownerKey() použije $name priamo ako názov stĺpca — pre stĺpec author\_id odovzdajte author\_id — a vráti ColumnDefinition, takže naň môžete reťaziť ďalšie modifikátory stĺpca. morphKey() a polymorphicSubject() použijú $name ako predponu dvojice \_type / \_id; s KeyType::BigInt vždy vytvoria číselnú dvojicu, aj keď hostiteľ volá Schema::morphUsingUuids() alebo morphUsingUlids(). Logika makier je dostupná aj ako obyčajné statické metódy na RoundlyConsulting\\PackageToolkit\\Support\\BlueprintMacros, ktoré voláte s explicitným Blueprint.

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