hasMany(CustomFieldCategory::class, 'custom_field_id'); } public function translations() { return $this->hasMany(CustomFieldsTranslation::class); } public function item_custom_field_values() { return $this->hasMany(ItemCustomFieldValue::class); } public function categories() { return $this->belongsToMany(Category::class, CustomFieldCategory::class); } public function getValuesAttribute($value) { try { return array_values(json_decode($value, true, 512, JSON_THROW_ON_ERROR)); } catch (Throwable) { return $value; } } public function getImageAttribute($image) { if (!empty($image)) { return url(Storage::url($image)); } return $image; } public function scopeSearch($query, $search) { $search = "%" . $search . "%"; $query = $query->where(function ($q) use ($search) { $q->orWhere('name', 'LIKE', $search) ->orWhere('type', 'LIKE', $search) ->orWhere('values', 'LIKE', $search) ->orWhere('status', 'LIKE', $search) ->orWhereHas('categories', function ($q) use ($search) { $q->where('name', 'LIKE', $search); }); }); return $query; } public function scopeFilter($query, $filterObject) { if (!empty($filterObject)) { foreach ($filterObject as $column => $value) { if ($column == "category_names") { $query->whereHas('custom_field_category', function ($query) use ($value) { $query->where('category_id', $value); }); } elseif ($column == "type") { $query->where('type', $value); } else { $query->where((string)$column, (string)$value); } } } return $query; } public function getTranslatedNameAttribute() { $languageCode = request()->header('Content-Language') ?? app()->getLocale(); if ($this->relationLoaded('translations')) { $language = Language::where('code', $languageCode)->first(); if ($language) { $translation = $this->translations->first(static function ($data) use ($language) { return $data->language_id == $language->id; }); return $translation->name ?? $this->name; } } return $this->name; } public function getTranslatedValueAttribute() { $languageCode = request()->header('Content-Language') ?? app()->getLocale(); if ($this->relationLoaded('translations')) { $language = Language::where('code', $languageCode)->first(); if ($language) { $translation = $this->translations->first(fn($t) => $t->language_id == $language->id); try { return $translation && $translation->value ? $translation->value : $this->values; } catch (\Throwable) { return $this->values; } } } return $this->values; } }