Files
admin/app/Models/CustomField.php
Husanjonazamov e0f1989655 classify admin
2026-02-24 12:52:01 +05:00

124 lines
4.1 KiB
PHP

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Storage;
use Throwable;
class CustomField extends Model {
use HasFactory;
protected $fillable = [
'name',
'type',
'image',
'required',
'status',
'values',
'min_length',
'max_length',
];
protected $hidden = ['created_at', 'updated_at'];
protected $appends = ['translated_name', 'translated_value'];
public function custom_field_category() {
return $this->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;
}
}