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

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 typujeKto vlastní model
key_typeodchádzajúciauthor_id — morph stĺpec, ktorý ukazuje na váš model autoravy (váš User, Team, …)
primary_key_typeprichádzajúciid tabuliek posts, post_categories, post_tags, parent_id a oboch pivotov — id, na ktoré ukazujú iné balíkytento 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 bigint

Obe 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 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.