ldc-arcadia-api/src/Infra/Database/Models/Brand.php

77 lines
2 KiB
PHP
Raw Normal View History

<?php
declare(strict_types=1);
namespace Infra\Database\Models;
use Database\Factories\BrandFactory;
use Illuminate\Database\Eloquent\Concerns\HasUuids;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Infra\Casts\ArcadiaIdCast;
use Infra\Casts\BrandCodeCast;
use Infra\Database\Relations\ArcadiaBrandBelongsTo;
/**
* @phpcs:disable Generic.Files.LineLength.TooLong
*
* @property string $id
* @property \Domain\Models\ValueObjects\Brand\BrandCode $uwil_public_id A unique public id that is generated spefically for the UWIL eco system
* @property \Domain\Models\ValueObjects\Brand\ArcadiaId $arcadia_id An unique external autoincrement id for the brand, it may be exposed but should not be used
* @property-read \Infra\Database\Models\ArcadiaBrand|null $arcadiaBrand
*
* @method static \Database\Factories\BrandFactory factory($count = null, $state = [])
*
* @mixin \Eloquent
*/
final class Brand extends Model
{
/** @use HasFactory<BrandFactory> */
use HasFactory;
use HasUuids;
protected static function newFactory(): BrandFactory
{
return BrandFactory::new();
}
protected $table = 'brands';
public $timestamps = false;
/** @var list<string> */
protected $fillable = [
'id',
'arcadia_id',
'uwil_public_id',
];
/** @return array<string, string> */
#[\Override]
protected function casts(): array
{
return [
'arcadia_id' => ArcadiaIdCast::class,
'uwil_public_id' => BrandCodeCast::class,
];
}
/**
* @return ArcadiaBrandBelongsTo
*/
public function arcadiaBrand(): BelongsTo
{
$instance = $this->newRelatedInstance(ArcadiaBrand::class);
return new ArcadiaBrandBelongsTo(
$instance->newQuery(),
$this,
'arcadia_id',
'code',
'arcadiaBrand'
);
}
}