Trait HasAddresses
Trait pridajte každému Eloquent modelu, ktorý vlastní adresy — zákazníkom, firmám, objednávkam, prevádzkam. Implementácia kontraktu Addressable je voliteľná, ale umožní ostatnému kódu typovať rozhranie namiesto konkrétneho modelu:
use Illuminate\Database\Eloquent\Model;
use RoundlyConsulting\Addresses\Contracts\Addressable;
use RoundlyConsulting\Addresses\Traits\HasAddresses;
class Customer extends Model implements Addressable
{
use HasAddresses;
}Vzťah
addresses() je vzťah MorphMany na nakonfigurovaný model adresy, takže na ňom máte k dispozícii všetky metódy Eloquent dopytov aj scopy balíka:
use RoundlyConsulting\Addresses\Enums\AddressType;
$customer->addresses; // Collection of Address
$customer->addresses()->count();
$customer->addresses()->primary()->ofType(AddressType::Billing)->get();
$customer->addresses()->inCountry('SK')->latest()->get();Čo trait pridáva
- addresses() — polymorfný vzťah.
- newAddress() — spustí fluentný builder naviazaný na tento model.
- addAddress(AddressData $data) a createAddress(...) — vytvorenie z DTO alebo z pomenovaných argumentov.
- getAddressOfType(), getPrimaryAddressOfType(), primaryAddress(), addressesOfType(), hasAddresses() — čítanie.
- setPrimaryAddress(Address $address) — povýši jednu z adries tohto modelu na primárnu, s kontrolou vlastníctva.
- addressBook() — AddressBook tohto modelu, ten istý objekt, ktorý vráti Addresses::for($model).
Pomocníci sú len skratkou nad fasádou: každý prechádza adresárom modelu, takže každé volanie vidia aj vaše prepísané akcie a Addresses::fake().
Typovanie cez kontrakt
Addressable deklaruje všetky metódy traitu okrem addresses(), createAddress() a addressBook(), takže vaše funkcie môžu prijať ľubovoľného vlastníka adries:
use RoundlyConsulting\Addresses\Address;
use RoundlyConsulting\Addresses\Contracts\Addressable;
use RoundlyConsulting\Addresses\Enums\AddressType;
function shippingAddressFor(Addressable $owner): ?Address
{
return $owner->primaryAddress(AddressType::Shipping)
?? $owner->getAddressOfType(AddressType::Shipping);
}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.