---
title: "Typy kľúčov a schéma — Credits for Laravel | Roundly"
description: "Tabuľky credits a credit_locks a ako key_type a primary_key_type určujú typ morph stĺpca aj vlastného id knihy pohybov."
url: https://roundly-consulting.com/sk/open-source/navody/credits-for-laravel/typy-klucov
language: sk
---

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

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

# Typy kľúčov a schéma

Jediná tabuľka credits drží všetky záznamy knihy pohybov všetkých vlastníkov. Jej tvar:

| Stĺpec | Typ | Poznámka |
| --- | --- | --- |
| `id` | bigint / uuid / ulid | Podľa primary\_key\_type — predvolene autoinkrementálny bigint. |
| `creditable_type` | string | Morph trieda vlastníka. |
| `creditable_id` | bigint / uuid / ulid | Podľa key\_type. Indexovaný spolu s creditable\_type. |
| `bucket` | string | Predvolene 'default', indexovaný. |
| `amount` | bigInteger | So znamienkom: kladné pripisuje, záporné odpisuje. Pretypované na int. |
| `description` | string, nullable | Voliteľná poznámka pre ľudí. |
| `meta` | json(b), nullable | Ľubovoľný štruktúrovaný kontext, pretypovaný na pole. |
| `created_at / updated_at` | timestamps | created\_at určuje zostatky k dátumu. |
| `deleted_at` | soft deletes | Soft-deleted záznamy sa do zostatku už nezapočítavajú. |

Zložený index nad (creditable\_type, creditable\_id, bucket) obsluhuje každé čítanie zostatku.

## Tabuľka credit\_locks

Tá istá migrácia vytvorí credit\_locks — jeden malý riadok na vlastníka, ktorý každá zmena zvýši, aby sa súbežné zmeny toho istého vlastníka zoradili za sebou. Drží len počítadlo verzií; jediným zdrojom pravdy ostáva kniha pohybov:

| Stĺpec | Typ | Poznámka |
| --- | --- | --- |
| `creditable_type` | string | Morph trieda vlastníka. Primárny kľúč spolu s creditable\_id. |
| `creditable_id` | bigint / uuid / ulid | Podľa key\_type — rovnaký typ ako v credits. |
| `version` | unsignedBigInteger | Predvolene 0. Každá zmena ho zvýši; na zostatok sa nikdy nečíta. |

## Dva nezávislé typy kľúčov

Dve nastavenia určujú typ dvoch rôznych stĺpcov. Sú nezávislé — používatelia s uuid, ktorí držia kredity pod bigint id tabuľky credits, sú úplne bežná kombinácia:

| Nastavenie | Určuje typ | Voľba |
| --- | --- | --- |
| `key_type` | creditable\_id — morph stĺpec, ktorý ukazuje na vaše modely, v credits aj credit\_locks | Primárny kľúč vašich modelov s kreditmi: bigint (predvolené), uuid (HasUuids) alebo ulid (HasUlids). |
| `primary_key_type` | id — vlastný kľúč tabuľky credits | Naň ukazujú polymorfné stĺpce iných balíkov. Ponechajte bigint, pokiaľ všetky morph ciele vo vašej aplikácii nezdieľajú jeden typ kľúča. |

Obe sa zafixujú pri prvom spustení migrácie, preto ich nastavte pred publikovaním a migráciou:

```bash
# Decide before publishing and running the migration — both are fixed at migrate time.
CREDITS_KEY_TYPE=uuid             # your creditable models use HasUuids
CREDITS_PRIMARY_KEY_TYPE=bigint   # the credits table's own id — keep the default
```

## key\_type podľa vašich modelov

key\_type musí zodpovedať primárnemu kľúču vašich modelov s kreditmi: pri autoinkrementálnych id ponechajte predvolený bigint, a ak modely používajú HasUuids alebo HasUlids, nastavte uuid alebo ulid:

```bash
CREDITS_KEY_TYPE=uuid
```

Ak ho pri používateľoch s uuid kľúčmi necháte na bigint, PostgreSQL odmietne hneď prvú zmenu:

```
SQLSTATE[22P02]: invalid input syntax for type bigint: "01a0e9ca-cf2c-7..."
```

Všetky modely s kreditmi v aplikácii musia zdieľať tento jeden typ kľúča.

## Prečo je primary\_key\_type predvolene bigint

Na Credit polymorfne ukazujú iné balíky a morph stĺpec v Laraveli ($table->morphs('subject')) je unsigned bigint. Na striktnom engine, ako je PostgreSQL, sa doň uuid id kreditu nezmestí:

```
SQLSTATE[22P02]: invalid input syntax for type bigint: "019f6f33-22b8-737f-a581-849e7cdc517a"
```

SQLite vás na to neupozorní — vďaka typovej afinite potichu uloží reťazec do celočíselného stĺpca, takže zelená sada testov na SQLite tu nič nedokazuje.

Obmedzenie: predpokladá sa, že všetky morph ciele vo vašej aplikácii zdieľajú jeden typ kľúča. Ak nastavíte CREDITS\_PRIMARY\_KEY\_TYPE=uuid, modely na druhej strane vašich polymorfných vzťahov musia mať tiež uuid kľúče a balíky, ktoré tieto stĺpce vlastnia, s tým musia súhlasiť. Zmiešanú aplikáciu — uuid Credit a bigint Comment, na ktoré ukazuje ten istý morph stĺpec — nepodporuje tento balík, rozdelenie morphs()/uuidMorphs() v Laraveli ani nič iné. Zvoľte jeden typ kľúča pre celú aplikáciu.

## 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/credits-for-laravel.md)
