HEX
Server: Microsoft-IIS/8.5
System: Windows NT YDAWBH120 6.3 build 9600 (Windows Server 2012 R2 Standard Edition) AMD64
User: tentjecom_web (0)
PHP: 7.4.14
Disabled: NONE
Upload Files
File: D:/HostingSpaces/SBogers10/shop.komma.nl/app/Addresses/Models/Address.php
<?php declare(strict_types=1);


namespace App\Addresses\Models;


use App\Addresses\AddressInterface;
use App\Users\SiteUserInterface;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Komma\KMS\Globalization\RegionInfo;

/**
 * App\Addresses\Models\Address
 *
 * @property int $id
 * @property string $first_name
 * @property string $last_name_prefix
 * @property string $last_name
 * @property string $street
 * @property string $house_number
 * @property string $postal_code
 * @property string $city
 * @property string $country_iso3 ISO 3166-1 alpha-3 - three-letter country codes
 * @property int $site_user_id
 * @property \Illuminate\Support\Carbon|null $created_at
 * @property \Illuminate\Support\Carbon|null $updated_at
 * @property-read \Illuminate\Database\Eloquent\Collection|\App\Users\SiteUser[] $accountAddressSiteUsers
 * @property-read int|null $account_address_site_users_count
 * @property-read string $country
 * @property-read string $users_name
 * @property-read \Illuminate\Database\Eloquent\Collection|\App\Users\SiteUser[] $invoiceAddressSiteUsers
 * @property-read int|null $invoice_address_site_users_count
 * @property-read \Illuminate\Database\Eloquent\Collection|\App\Users\SiteUser[] $shippingAddressSiteUsers
 * @property-read int|null $shipping_address_site_users_count
 * @property-read \App\Users\SiteUser $siteUser
 * @method static \Illuminate\Database\Eloquent\Builder|Address newModelQuery()
 * @method static \Illuminate\Database\Eloquent\Builder|Address newQuery()
 * @method static \Illuminate\Database\Eloquent\Builder|Address query()
 * @method static \Illuminate\Database\Eloquent\Builder|Address whereCity($value)
 * @method static \Illuminate\Database\Eloquent\Builder|Address whereCountryIso3($value)
 * @method static \Illuminate\Database\Eloquent\Builder|Address whereCreatedAt($value)
 * @method static \Illuminate\Database\Eloquent\Builder|Address whereFirstName($value)
 * @method static \Illuminate\Database\Eloquent\Builder|Address whereHouseNumber($value)
 * @method static \Illuminate\Database\Eloquent\Builder|Address whereId($value)
 * @method static \Illuminate\Database\Eloquent\Builder|Address whereLastName($value)
 * @method static \Illuminate\Database\Eloquent\Builder|Address whereLastNamePrefix($value)
 * @method static \Illuminate\Database\Eloquent\Builder|Address wherePostalCode($value)
 * @method static \Illuminate\Database\Eloquent\Builder|Address whereSiteUserId($value)
 * @method static \Illuminate\Database\Eloquent\Builder|Address whereStreet($value)
 * @method static \Illuminate\Database\Eloquent\Builder|Address whereUpdatedAt($value)
 * @mixin \Eloquent
 */
class Address extends Model implements AddressInterface
{
    /**
     * Returns all site users which have this address as shipping address
     * This method uses shipping_address_id on the site_users table
     *
     * @return HasMany
     */
    public function shippingAddressSiteUsers(): HasMany
    {
        return $this->hasMany(app(SiteUserInterface::class), 'shipping_address_id');
    }

    /**
     * Returns all site users which have this address as shipping address
     * This method uses invoice_address_id on the site_users table
     *
     * @return HasMany
     */
    public function invoiceAddressSiteUsers(): HasMany
    {
        return $this->hasMany(app(SiteUserInterface::class), 'invoice_address_id');
    }

    /**
     * The attributes that should be mutated to dates.
     *
     * @var array
     */

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'first_name',
        'last_name',
        'last_name_prefix',
        'street',
        'house_number',
        'postal_code',
        'city',
        'country_iso3',
    ];

    /**
     * Returns all site users which have this address as their account address
     * This method uses account_address_id on the site_users table
     *
     * @return HasMany
     */
    public function accountAddressSiteUsers(): HasMany
    {
        return $this->hasMany(app(SiteUserInterface::class), 'account_address_id');
    }


    /**
     * Accessor method. Is triggered when you do this: Address->country
     * @return string
     */
    public function getCountryAttribute() {
        /** @var RegionInfo $regionInfo */
        $regionInfo = RegionInfo::getWhere('threeLetterISORegionName', '=', $this->country_iso3)->first();
        if(!$regionInfo) return '';
        return $regionInfo->getNativeName();
    }

    /**
     * @return string
     */
    public function getUsersNameAttribute() {
        return implode(' ', [$this->first_name, $this->last_name_prefix, $this->last_name]);
    }

    /**
     * @return BelongsTo
     */
    public function siteUser(): BelongsTo
    {
        return $this->belongsTo(get_class(app(SiteUserInterface::class)));
    }

    static function basicValidationRules()
    {
        return [
            'street'            => ['string','min:2','max:255'],
            'house_number'      => ['string','min:1','max:255'],
            'postal_code'       => ['string','min:2','max:255'],
            'city'              => ['string','min:2','max:255'],
            'phone'             => ['string','min:7','max:40'],
        ];
    }
}