$translations * @property-read int|null $translations_count * @mixin \Eloquent */ class Category extends Model { use Sluggable; protected $table = 'categories'; protected $fillable = [ 'parent_id', 'name', 'headline', 'pos', 'active', ]; public function sluggable() : array { return [ 'slug' => [ 'source' => 'name' ] ]; } public function parent() { return $this->belongsTo('App\Models\Category', 'parent_id'); } public function childrens() { return $this->hasMany('App\Models\Category', 'parent_id', 'id'); } public function product_categories() { return $this->hasMany('App\Models\ProductCategory', 'category_id', 'id')->orderBy('pos', 'DESC'); } public function productCategoriesCountActive() { $category_id = $this->id; return Product::where('active', true)->whereHas('product_categories', function ($query) use ($category_id) { $query->where('category_id', $category_id); // })->orderBy('pos', 'ASC')->count(); } public function productCategoriesCountActiveOn($show_on = ['1']) { $category_id = $this->id; return Product::where('active', true)->whereJsonContains('show_on', $show_on) ->whereHas('product_categories', function ($query) use ($category_id) { $query->where('category_id', $category_id); // })->orderBy('pos', 'ASC')->count(); } public function iq_image() { return $this->belongsTo('App\Models\IqImage', 'headline_image_id'); } public function setPosAttribute($value){ $this->attributes['pos'] = is_numeric($value) ? $value : null; } public function translations() { return $this->hasMany(TransCategory::class, 'categorie_id'); } public function getLang($key) { $lang = \App::getLocale(); if ($lang == 'de') { return $this->{$key}; } $trans = $this->getTrans($key, $lang); return $trans != '' ? $trans : $this->{$key}; } public function getTrans($key, $lang) { $trans = $this->translations->where('language','=', $lang)->where('key', $key)->first(); return $trans ? $trans->value : ''; } }