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'],
];
}
}