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

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ĺpecTypPoznámka
idbigint, autoinkrementPrimárny kľúč — vždy celé číslo, bez ohľadu na key_type.
addressable_type / addressable_idpolymorfná dvojicaVlastník. Typ stĺpca id sa riadi podľa key_type; spoločný index; nesmie byť null.
is_primarybooleanPredvolene false.
typestringPredvolene 'default'; ukladá hodnotu AddressType.
namestring, nullableVoliteľný názov, napr. HQ.
city, street, postal_codestring, nullableRiadky adresy — builder a DTO ich vyžadujú, schéma ich povoľuje ako null.
country_isostring, nullableISO kód, normalizovaný pri zápise.
metajsonb, nullableVoľné doplnkové údaje; cast na Collection.
created_at, updated_attimestamps—
deleted_attimestamp, nullableSoft 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_typeStĺpec addressable_idKedy použiť
bigintunsigned big integer — morphs()Vlastníci majú autoinkrementálne kľúče. Predvolená hodnota.
uuiduuid — uuidMorphs()Vlastníci používajú HasUuids z Laravelu.
ulidchar(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=uuid
use 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 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.