app/Device.php
<?php namespace App; use Illuminate\Database\Eloquent\Model;use Webpatser\Uuid\Uuid; class Device extends Model{ protected $fillable = ['name', 'description']; protected $table = 'devices'; public static function boot(): void { parent::boot(); static::deleting(function (Device $device) { $device->specificDevice()->delete(); }); self::creating(function (Device $device) { $device->public_id = Uuid::generate(4); }); } public function htmlDataAttributesForSpecificDevice(): array { $specificDevice = $this->specificDevice(); $properties = $specificDevice->getFillable(); Avoid excessively long variable names like $htmlDataAttributesForSpecificDeviceProperties. Keep variable name length under 35. $htmlDataAttributesForSpecificDeviceProperties = []; foreach ($properties as $property) { $propertyName = str_replace('_', '-', $property); $propertyValue = $specificDevice->$property; $htmlDataAttributesForSpecificDeviceProperties[] = 'data-device-' . $propertyName . '=' . $propertyValue; } return $htmlDataAttributesForSpecificDeviceProperties; } public function specificDevice(): Model { $deviceTypeId = $this->device_type_id; $deviceType = DeviceType::find($deviceTypeId)->type; $deviceTypeClassName = 'App\\' . $deviceType . 'Device'; $specificDevice = $this->hasOne($deviceTypeClassName)->first(); return $specificDevice; }}