---
title: "Databázová schéma a typy kľúčov — Reports for Laravel | Roundly"
description: "Tabuľka reports stĺpec po stĺpci, jej indexy a ako key_type a primary_key_type určujú stĺpce bigint, UUID alebo ULID."
url: https://roundly-consulting.com/sk/open-source/navody/reports-for-laravel/databazova-schema
language: sk
---

[Všetky balíky](https://roundly-consulting.com/sk/open-source.md)

[Reports for Laravel](https://roundly-consulting.com/sk/open-source/navody/reports-for-laravel.md)

# 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ĺpec | Typ | Poznámka |
| --- | --- | --- |
| `id` | bigint, uuid alebo ulid | Primárny kľúč podľa primary\_key\_type — predvolene autoinkrementálny bigint, bez ohľadu na key\_type. |
| `reporter_type / reporter_id` | nullable morph | Nahlasovateľ — null pri hlásení hosťa a anonymnom hlásení. |
| `reported_type / reported_id` | nullable morph | Nahlásený subjekt. |
| `resolved_by_type / resolved_by_id` | nullable morph | Moderátor, ktorý hlásenie vybavil — null pri systémových akciách. |
| `status` | string, indexovaný | Hodnota stavu, predvolene pending. |
| `reason` | string, indexovaný | Slug dôvodu. |
| `description` | text, nullable | Popis od nahlasovateľa. |
| `resolution_note` | text, nullable | Poznámka moderátora. |
| `guest_identifier` | string, nullable, indexovaný | Hašovaná IP adresa alebo e-mail na deduplikáciu hlásení hostí. |
| `resolved_at` | timestamp, nullable | Kedy bolo hlásenie vyriešené alebo zamietnuté. |
| `created_at / updated_at` | timestamps | Štandardné časové značky Eloquentu. |
| `deleted_at` | timestamp, nullable | Soft 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\_type | Morph id stĺpce | Použite, ak vaše modely majú |
| --- | --- | --- |
| `bigint` | bigint | Autoinkrementálne celočíselné kľúče (predvolené). |
| `uuid` | uuid | UUID primárne kľúče (HasUuids). |
| `ulid` | char(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:

```bash
REPORTS_KEY_TYPE=uuid
```

```php
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:

```bash
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](https://roundly-consulting.com/sk/podporte-nas.md)

Odoslaním daru súhlasíte s našimi [podmienkami prijímania darov](https://roundly-consulting.com/sk/podmienky-darov.md).

[Podporte našu open-source prácu (otvorí sa v novej karte)](https://donate.stripe.com/dRmeVe8FX5PF1Qd9pXcEw00) [Pridajte sa k nám na Patreone (otvorí sa v novej karte)](https://www.patreon.com/cw/roundly)

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

[Ponuka do 48 hodín](https://roundly-consulting.com/sk/kontakt.md) [Prezrieť všetky balíky](https://roundly-consulting.com/sk/open-source/navody/reports-for-laravel.md)
