Databázová schéma a typy kľúčov
Migrácia vytvorí jednu tabuľku, addresses. Všetci vlastníci ju zdieľajú cez polymorfnú dvojicu addressable:
$keyType = KeyType::fromConfig('addresses.key_type');
Schema::create('addresses', function (Blueprint $table) use ($keyType): void {
$table->id();
$table->morphKey('addressable', $keyType, nullable: false); // morphs / uuidMorphs / ulidMorphs
$table->boolean('is_primary')->default(false);
$table->string('type')->default('default');
$table->string('name')->nullable();
$table->string('city')->nullable();
$table->string('street')->nullable();
$table->string('postal_code')->nullable();
$table->string('country_iso')->nullable();
$table->jsonb('meta')->nullable();
$table->timestamps();
$table->softDeletes();
});
$this->onePrimaryPerOwnerAndType(); // PostgreSQL and SQLite: partial unique index| Stĺpec | Typ | Poznámka |
|---|---|---|
id | bigint, autoinkrement | Primárny kľúč — vždy celé číslo, bez ohľadu na key_type. |
addressable_type / addressable_id | polymorfná dvojica | Vlastník. Typ stĺpca id sa riadi podľa key_type; spoločný index; nesmie byť null. |
is_primary | boolean | Predvolene false. |
type | string | Predvolene 'default'; ukladá hodnotu AddressType. |
name | string, nullable | Voliteľný názov, napr. HQ. |
city, street, postal_code | string, nullable | Riadky adresy — builder a DTO ich vyžadujú, schéma ich povoľuje ako null. |
country_iso | string, nullable | ISO kód, normalizovaný pri zápise. |
meta | jsonb, nullable | Voľné doplnkové údaje; cast na Collection. |
created_at, updated_at | timestamps | — |
deleted_at | timestamp, nullable | Soft deletes. |
- Stĺpec country_name neexistuje — názov krajiny sa zisťuje pri čítaní cez váš CountryResolver.
- Najviac jedna živá primárna adresa na vlastníka a typ: akcie balíka povyšujú pod zámkom skupiny vlastník + typ a na PostgreSQL a SQLite migrácia pridá aj čiastočný unikátny index addresses_one_primary_per_type nad (addressable_type, addressable_id, type) s podmienkou is_primary a deleted_at is null — mäkko zmazané záznamy miesto neblokujú.
- Migrácia ide len dopredu — nemá metódu down().
Typy kľúčov vlastníka
key_type opisuje modely, ktoré vlastnia adresy — nikdy nie samotnú tabuľku addresses, ktorá má vždy autoinkrementálne id. Určuje, aký polymorfný stĺpec migrácia vytvorí:
| key_type | Stĺpec addressable_id | Kedy použiť |
|---|---|---|
bigint | unsigned big integer — morphs() | Vlastníci majú autoinkrementálne kľúče. Predvolená hodnota. |
uuid | uuid — uuidMorphs() | Vlastníci používajú HasUuids z Laravelu. |
ulid | char(26) — ulidMorphs() | Vlastníci používajú HasUlids z Laravelu. |
Všetky modely vlastniace adresy musia mať rovnaký typ kľúča. Nastavte ho pred migráciou — neznáma hodnota pri spustení migrácie vyhodí InvalidConfigurationException, ktorá uvedie kľúč aj hodnotu:
# .env — set before you publish and run the migration
ADDRESSES_KEY_TYPE=uuiduse Illuminate\Database\Eloquent\Concerns\HasUuids;
use Illuminate\Database\Eloquent\Model;
use RoundlyConsulting\Addresses\Traits\HasAddresses;
class Customer extends Model
{
use HasAddresses;
use HasUuids;
}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.