Typy kľúčov
Typy kľúčov v schéme určujú dve nezávislé nastavenia. Obe prijímajú bigint (predvolené), uuid alebo ulid; čokoľvek iné vyhodí InvalidConfigurationException s názvom kľúča:
| Nastavenie | Smer | Čo určuje |
|---|---|---|
primary_key_type | Dovnútra — na čo ukazujú iné balíky | Id tabuliek messaging_threads, messaging_messages a messaging_participants a stĺpce thread_id, parent_message_id, last_read_message_id a last_message_id. |
key_type | Von — na čo ukazuje tento balík | Morph stĺpce sender_id a participant_id, ktoré musia zodpovedať vašim modelom User, Company či iným účastníkom. |
MESSAGES_KEY_TYPE=uuid # User uses HasUuids
# MESSAGES_PRIMARY_KEY_TYPE stays bigintObe sa čítajú pri spustení migrácií, preto ich zvoľte pred publikovaním a migráciou. Neskoršia zmena je dátová migrácia, nie úprava konfigurácie.
key_type musí zodpovedať vašim modelom
Ak necháte key_type na bigint pri používateľoch s uuid, PostgreSQL odmietne hneď prvú konverzáciu:
SQLSTATE[22P02]: invalid input syntax for type bigint: "01a0fc2b-4518-722a-8e92-50589b45ba2a"Všetky modely, ktoré posielajú správy alebo sa zúčastňujú, zdieľajú stĺpce sender_id a participant_id, takže musia používať jeden typ kľúča — bigint User a uuid Company sa zúčastniť oba nemôžu.
Prečo je primary_key_type predvolene bigint
Na vlákno či správu ukazujú iné balíky polymorfne a morph stĺpec v Laraveli ($table->morphs(…)) je unsigned bigint. Na striktnom engine, ako je PostgreSQL, sa doň uuid nezmestí — s rovnakou chybou ako vyššie.
SQLite vás na žiadny z týchto nesúladov neupozorní — vďaka typovej afinite potichu uloží reťazec do celočíselného stĺpca, takže zelená SQLite sada tu nič nedokazuje.
Jeden typ kľúča na aplikáciu
Ak nastavíte MESSAGES_PRIMARY_KEY_TYPE=uuid, aj modely na druhom konci vašich polymorfných vzťahov musia mať uuid kľúče a balíky, ktorým tie stĺpce patria, s tým musia súhlasiť. Zmiešanú aplikáciu — uuid Thread a bigint Post, na ktoré ukazuje ten istý morph stĺpec — nepodporuje tento balík, rozdelenie morphs()/uuidMorphs() v Laraveli ani nič iné.
key_type je druhá os: inštalácia správ s bigint kľúčmi a používateľmi s uuid je úplne bežná aplikácia — nastavte MESSAGES_KEY_TYPE=uuid a MESSAGES_PRIMARY_KEY_TYPE nechajte na bigint, ako v príklade vyššie.
Generované kľúče
Pri uuid a ulid si modely generujú id samy — UUIDv7 alebo ULID — oba časovo zoradené, takže radenie od najnovších aj vyhľadanie poslednej správy v schránke zostávajú deterministické pri každom type kľúča. Pri bigint prideľuje id databáza ako obvykle.
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.