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

Databázová schéma a typy kľúčov

Balík používa jedinú tabuľku. Jej názov určuje konfiguračný kľúč table:

StĺpecTypPoznámka
idbigint, uuid alebo ulidPrimárny kľúč podľa primary_key_type — predvolene autoinkrementálny bigint, bez ohľadu na key_type.
reporter_type / reporter_idnullable morphNahlasovateľ — null pri hlásení hosťa a anonymnom hlásení.
reported_type / reported_idnullable morphNahlásený subjekt.
resolved_by_type / resolved_by_idnullable morphModerátor, ktorý hlásenie vybavil — null pri systémových akciách.
statusstring, indexovanýHodnota stavu, predvolene pending.
reasonstring, indexovanýSlug dôvodu.
descriptiontext, nullablePopis od nahlasovateľa.
resolution_notetext, nullablePoznámka moderátora.
guest_identifierstring, nullable, indexovanýHašovaná IP adresa alebo e-mail na deduplikáciu hlásení hostí.
resolved_attimestamp, nullableKedy bolo hlásenie vyriešené alebo zamietnuté.
created_at / updated_attimestampsŠtandardné časové značky Eloquentu.
deleted_attimestamp, nullableSoft delete.

Dva zložené indexy obsluhujú najčastejšie dotazy: (reported_type, reported_id, status) pre agregácie a kontrolu prahu a deduplikačný index nad (reported_type, reported_id, reporter_type, reporter_id) s názvom <table>_dedupe_index.

Typ morph kľúča

key_type určuje typ id stĺpca všetkých troch morph dvojíc — reporter, reported a resolved_by. Vlastný primárny kľúč tabuľky nastavuje samostatne primary_key_type (nižšie):

key_typeMorph id stĺpcePoužite, ak vaše modely majú
bigintbigintAutoinkrementálne celočíselné kľúče (predvolené).
uuiduuidUUID primárne kľúče (HasUuids).
ulidchar(26)ULID primárne kľúče (HasUlids).

Pri hodnote uuid alebo ulid musia modely nahlasovateľov, nahlásených subjektov aj moderátorov používať reťazcové primárne kľúče. Nastavte ju pred migráciou — určuje typy stĺpcov:

REPORTS_KEY_TYPE=uuid
use Illuminate\Database\Eloquent\Concerns\HasUuids;
use Illuminate\Database\Eloquent\Model;
use RoundlyConsulting\Reports\Traits\GivesReports;

class User extends Model
{
    use GivesReports;
    use HasUuids;   // string primary key to match key_type = uuid
}

Nenastavený alebo prázdny kľúč znamená bigint; neznáma hodnota pri spustení migrácie vyhodí InvalidConfigurationException z toolkitu, namiesto toho, aby potichu vytvorila stĺpce bigint.

Typ primárneho kľúča

primary_key_type určuje typ vlastného id tabuľky reports — kľúča, na ktorý odkazujú iné tabuľky: bigint (predvolený, autoinkrementálny), uuid alebo ulid. Pri uuid alebo ulid model Report pri vytvorení vygeneruje UUIDv7 alebo ULID a route binding považuje chybne zapísané id za nenájdené. Rovnako ako key_type ho číta migrácia pri spustení a neznáma hodnota vyhodí InvalidConfigurationException.

Rozhodujúci je pri moderácii. Moderované hlásenie je subjektom approvals a approvals-for-laravel určuje typ stĺpcov subjektu tým istým approvals.key_type ako typ stĺpcov moderátorov, takže na PostgreSQL sa oba typy musia zhodovať — pri bigint id hlásení a moderátoroch s UUID kľúčmi otvorenie moderácie zlyhá. Ak máte moderátorov s UUID, nastavte pred migráciou oba:

APPROVALS_KEY_TYPE=uuid
REPORTS_PRIMARY_KEY_TYPE=uuid

key_type sa naďalej riadi modelmi nahlasovateľov, nahlásených subjektov a tých, ktorí hlásenia vybavujú; vybavuje ich moderátor, takže pri moderátoroch s UUID je tiež uuid. Moderácia s UUID na PostgreSQL navyše potrebuje migráciu 0007 balíka approvals-for-laravel, ktorá zmení approvals.approval_request_id na bigint — ak ste migrácie approvals publikovali skôr, než existovala, publikujte ich znova. MySQL a SQLite pri nezhode nezlyhajú, no zhodné typy kľúčov sú aj tak bezpečnejšie nastavenie.

Prevod existujúcej inštalácie

Typ kľúča sa určí pri prvom spustení migrácie: neskoršia zmena primary_key_type existujúcu tabuľku nezmení a model nastavený na uuid alebo ulid nad stĺpcom id typu bigint pokazí každé nové hlásenie. Automatický prevod neexistuje. Napíšte vlastnú migráciu — so zastavenými zápismi a so zálohou:

  • Pridajte do tabuľky reports nullable stĺpec uuid (alebo ulid) a pre každý riadok ho naplňte cez Str::uuid7() alebo Str::ulid(); uchovajte si mapu starého id na nové.
  • Podľa mapy prepíšte každý odkaz na hlásenie: approval_requests.subject_id a approvals.approvable_id tam, kde typový stĺpec obsahuje morph triedu hlásenia, a tiež každý vlastný stĺpec s id hlásenia. Ak meníte aj APPROVALS_KEY_TYPE, v tej istej migrácii preveďte aj vlastné morph stĺpce approvals.
  • Odstráňte starý primárny kľúč id, nový stĺpec premenujte na id a nastavte ho ako primárny kľúč.
  • Nastavte REPORTS_PRIMARY_KEY_TYPE na nový typ a nasaďte.

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.