'integer', 'stock' => 'integer', ]; } public function cuttingMaterials(): HasMany { return $this->hasMany(CuttingMaterial::class); } public function purchaseItems(): HasMany { return $this->hasMany(PurchaseItem::class); } public function rawMaterial(): BelongsTo { return $this->belongsTo(RawMaterial::class)->withTrashed(); } public function getPhotoUrlAttribute(): ?string { $media = $this->getFirstMedia('photos'); return $media ? app(S3PresignedService::class)->getTemporaryUrl($media->file_name) : null; } }