Typy kľúčov
Posts má dve nezávislé nastavenia typu kľúča, pretože ide o dva rôzne kľúče s rôznymi vlastníkmi:
| Kľúč | Smer | Čo typuje | Kto vlastní model |
|---|---|---|---|
key_type | odchádzajúci | author_id — morph stĺpec, ktorý ukazuje na váš model autora | vy (váš User, Team, …) |
primary_key_type | prichádzajúci | id tabuliek posts, post_categories, post_tags, parent_id a oboch pivotov — id, na ktoré ukazujú iné balíky | tento balík |
Aplikácia s bigint používateľmi a uuid príspevkami je úplne bežná; oba kľúče sú predvolene bigint:
POSTS_KEY_TYPE=uuid # your User model is uuid-keyed
POSTS_PRIMARY_KEY_TYPE=bigint # posts' own ids stay bigintObe hodnoty sa čítajú pri spustení migrácie, preto ich zvoľte pred migrate. Nerozpoznaná hodnota vyhodí InvalidConfigurationException namiesto migrácie s bigint a neskoršia zmena znamená migráciu dát.
Prečo je primary_key_type predvolene bigint
Na príspevok polymorfne odkazujú iné balíky — dá sa označiť „páči sa mi“ aj nahlásiť. Morph stĺpec v Laraveli ($table->morphs('likeable')) je unsigned bigint, takže na striktnom engine, ako je PostgreSQL, sa doň uuid príspevku nezmestí:
SQLSTATE[22P02]: invalid input syntax for type bigint: "019f6f33-22b8-737f-a581-849e7cdc517a"SQLite vás neupozorní — vďaka typovej afinite potichu uloží reťazec do celočíselného stĺpca, takže zelené testy na SQLite tu nič nedokazujú. Na chybu nie je potrebný ani cudzí kľúč: polymorfný stĺpec ho mať nemôže.
primary_key_type meňte len vtedy, keď všetky morph ciele v aplikácii zdieľajú jeden typ kľúča. Pri POSTS_PRIMARY_KEY_TYPE=uuid musí mať uuid kľúč aj každý ďalší model, na ktorý ukazujú označenia „páči sa mi“, nahlásenia či komentáre — zmiešaná aplikácia nie je podporovaná. Ak používate históriu slugov s uuid alebo ulid príspevkami, nastavte pred migráciou tabuľky histórie sluggable.key_type (SLUGGABLE_KEY_TYPE) na rovnakú hodnotu.
Na modeloch
Post, Category a Tag sa riadia podľa primary_key_type cez concern HasConfigurableKey, postavený na HasUniqueStringIds z Laravelu a pri bigint vypnutý. Kľúče uuid sa generujú cez Str::uuid7(), ulid cez Str::ulid() a chybne formátované id vo väzbe routy sa odmietne skôr, než sa dostane do databázy.
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.