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:
// config/comments.php
return [
'key_type' => 'bigint', // bigint | uuid | ulid (or a KeyType case) — match the host's models
];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 / morphs |
'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:
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 morphs / uuidMorphs / ulidMorphs (+ nullable varianty) — <name>_type a <name>_id so zloženým indexom. |
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. 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 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.