91 lines
2.2 KiB
PHP
91 lines
2.2 KiB
PHP
<?php
|
|
|
|
namespace App\Models;
|
|
|
|
use Illuminate\Database\Eloquent\Model;
|
|
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
|
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
|
|
use Illuminate\Database\Eloquent\Relations\HasOne;
|
|
use Illuminate\Database\Eloquent\Relations\MorphMany;
|
|
|
|
class ProductVariant extends Model
|
|
{
|
|
protected $fillable = [
|
|
'product_id',
|
|
'name_suffix',
|
|
'is_master_variant',
|
|
'sku',
|
|
'han_mpn',
|
|
'ean_gtin',
|
|
'selling_price',
|
|
'msrp',
|
|
'purchase_price',
|
|
'tax_rate_id',
|
|
'stock_quantity',
|
|
'stock_min_threshold',
|
|
'availability_status',
|
|
'delivery_time_text',
|
|
'currency',
|
|
'is_rentable',
|
|
'rental_duration_options',
|
|
'rental_rate_formula',
|
|
'residual_value_percentage',
|
|
'variant_weight_g',
|
|
'is_active',
|
|
];
|
|
|
|
protected function casts(): array
|
|
{
|
|
return [
|
|
'is_master_variant' => 'boolean',
|
|
'selling_price' => 'integer',
|
|
'msrp' => 'integer',
|
|
'purchase_price' => 'integer',
|
|
'stock_quantity' => 'integer',
|
|
'is_rentable' => 'boolean',
|
|
'rental_duration_options' => 'array',
|
|
'residual_value_percentage' => 'decimal:2',
|
|
'is_active' => 'boolean',
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Gehört zu einem Produkt.
|
|
*/
|
|
public function product(): BelongsTo
|
|
{
|
|
return $this->belongsTo(Product::class);
|
|
}
|
|
|
|
/**
|
|
* Steuersatz der Variante.
|
|
*/
|
|
public function taxRate(): BelongsTo
|
|
{
|
|
return $this->belongsTo(TaxRate::class);
|
|
}
|
|
|
|
/**
|
|
* Attribut-Werte dieser Variante (z.B. Farbe: Rot, Größe: L).
|
|
*/
|
|
public function attributeValues(): BelongsToMany
|
|
{
|
|
return $this->belongsToMany(AttributeValue::class, 'product_variant_attributes');
|
|
}
|
|
|
|
/**
|
|
* Logistik-Daten der Variante (1:1).
|
|
*/
|
|
public function logistics(): HasOne
|
|
{
|
|
return $this->hasOne(ProductLogistics::class);
|
|
}
|
|
|
|
/**
|
|
* Bilder der Variante.
|
|
*/
|
|
public function media(): MorphMany
|
|
{
|
|
return $this->morphMany(Media::class, 'model');
|
|
}
|
|
}
|