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

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:

NastavenieSmerČo určuje
primary_key_typeDovnútra — na čo ukazujú iné balíkyId 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_typeVon — na čo ukazuje tento balíkMorph 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 bigint

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