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

Úprava a mazanie

Úprava

Addresses::update() zapíše AddressData do existujúcej adresy v jednej transakcii, pri isPrimary true ju povýši, odošle AddressUpdated (pri povýšení potom aj PrimaryAddressChanged) a vráti znova načítaný model. Spúšťa UpdateAddressAction, ktorú môžete zavolať aj priamo:

use RoundlyConsulting\Addresses\DataTransferObjects\AddressData;
use RoundlyConsulting\Addresses\Facades\Addresses;

$address = Addresses::update($address, AddressData::make(
    city: 'Bratislava',
    street: 'Somewhere 5',
    postalCode: '81102',
    countryIso: 'SK',
    // AddressData is a full write — carry over what should not change
    name: $address->name,
    type: $address->type,
    isPrimary: $address->is_primary,
    meta: $address->meta,
));

Úprava je úplný zápis: každé pole DTO nahradí uloženú hodnotu. Ak vynecháte name, type, isPrimary alebo meta, nastavia sa nanovo — name a meta na null, type na nakonfigurovaný default_type a isPrimary na false, čím adresa stratí primárny príznak — preto preneste všetko, čo sa meniť nemá, ako v príklade vyššie. Ak chcete na primárnu povýšiť mäkko zmazanú adresu, vyhodí sa TrashedAddressException.

Obyčajné $address->update([...]) funguje tiež, ale obíde normalizáciu krajiny, pravidlo primárnej adresy aj udalosť AddressUpdated.

Mazanie

Addresses::delete() adresu zmaže mäkko (soft delete), takže omylom zmazanú adresu viete obnoviť. AddressDeleted sa odošle z hooku deleted na modeli, ktorý beží pri delete() aj pri forceDelete():

use RoundlyConsulting\Addresses\Address;
use RoundlyConsulting\Addresses\Facades\Addresses;

Addresses::delete($address);                   // soft delete; dispatches AddressDeleted
$address->restore();                           // bring it back (as primary only if the slot is free)
$address->forceDelete();                       // permanent removal (dispatches AddressDeleted too)

Address::onlyTrashed()->get();                 // what was removed
$customer->addresses()->withTrashed()->get();  // including removed ones

Po zmazaní primárnej adresy zostane jej typ bez primárnej, kým nepovýšite inú. Zmazaná adresa si príznak ponechá, takže restore() ju vráti ako primárnu — no len vtedy, ak miesto v skupine vlastník + typ nedrží iná živá primárna adresa; inak sa vráti ako bežná adresa (pozrite Primárne adresy).

Keď sa zmaže vlastník

Polymorfný stĺpec nemá cudzí kľúč, takže zmazanie vlastníka jeho adresy ponechá. Zmažte ich po jednej, aby sa AddressDeleted odoslala pre každú — hromadné $customer->addresses()->delete() síce tiež maže mäkko, ale žiadne udalosti modelu neodošle:

// addresses are not removed with their owner — there is no foreign key or cascade.
// delete them per model so AddressDeleted fires for each:
$customer->addresses->each->delete();
$customer->delete();

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.