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

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áciiPrípadStĺpce
'bigint'KeyType::BigIntunsignedBigInteger / morphs
'uuid'KeyType::Uuiduuid / uuidMorphs
'ulid'KeyType::Ulidulid / ulidMorphs
Prípad KeyTypeTento 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()
});
MakroVý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 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.