PHP 8.2.30
Preview: Category.php Size: 2.69 KB
/home/byroehnu/easetack.com/app/Models/Category.php

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\HasOne;

class Category extends Model
{
    use HasFactory;

    protected $fillable = ['title', 'parent_id'];

    protected $appends = [
        'parent_category_name',
        'post_count',
    ];

    /**
     * Get contents
     */
    public function contents(): HasMany
    {
        return $this->hasMany(CategoryContent::class);
    }

    /**
     * Get Category Content
     */
    public function content(): HasOne
    {
        return $this->hasOne(CategoryContent::class)->where('language_code', app()->getLocale());
    }

    /**
     * parent category
     */
    public function parent(): BelongsTo
    {
        return $this->belongsTo(Category::class, 'parent_id');
    }

    /**
     * children category
     */
    public function children(): HasMany
    {
        return $this->hasMany(Category::class, 'parent_id');
    }

    /**
     *  Get parent category name
     */
    public function getParentCategoryNameAttribute(): mixed
    {
        if ($this->parent_id) {
            $parentCategory = $this->parent()->first();

            return $parentCategory?->content?->title;
        }

        return null;
    }

    /**
     * Get posts
     */
    public function posts(): HasMany
    {
        return $this->hasMany(Post::class);
    }

    /**
     * Get post count
     */
    public function getPostCountAttribute(): int
    {
        return $this->posts()->count();
    }

    /**
     * make serialize categories
     */
    protected static function serializeCategories($categories, $prefix = ''): array
    {
        $result = [];

        foreach ($categories as $category) {
            $categoryTitle = $prefix.$category?->content?->title;
            $result[] = ['value' => $category->id, 'label' => $categoryTitle];

            if ($category->children->isNotEmpty()) {
                $subcategories = self::serializeCategories($category->children, $prefix.'-');
                $result = array_merge($result, $subcategories);
            }
        }

        return $result;
    }

    /**
     * get serialized categories
     */
    public static function getSerializedCategories(string $languageCode): array
    {
        $categories = Category::whereNull('parent_id')->with([
            'children',
            'content' => function ($query) use ($languageCode) {
                $query->where('language_code', $languageCode);
            },
        ])->get();

        return self::serializeCategories($categories, '');
    }
}

Directory Contents

Dirs: 0 × Files: 50

Name Size Perms Modified Actions
1.75 KB lrw-rw-rw- 2025-04-19 04:22:17
Edit Download
1.02 KB lrw-rw-rw- 2025-04-08 04:12:56
Edit Download
346 B lrw-rw-rw- 2025-04-08 04:12:56
Edit Download
421 B lrw-rw-rw- 2025-04-08 04:12:56
Edit Download
2.69 KB lrw-rw-rw- 2025-04-19 04:22:17
Edit Download
216 B lrw-rw-rw- 2025-04-08 04:12:56
Edit Download
597 B lrw-rw-rw- 2025-04-08 04:12:56
Edit Download
240 B lrw-rw-rw- 2025-04-08 04:12:56
Edit Download
328 B lrw-rw-rw- 2025-04-19 04:22:17
Edit Download
179 B lrw-rw-rw- 2025-04-08 04:12:56
Edit Download
444 B lrw-rw-rw- 2025-05-05 10:37:43
Edit Download
369 B lrw-rw-rw- 2025-05-05 10:37:43
Edit Download
247 B lrw-rw-rw- 2025-04-08 04:12:56
Edit Download
718 B lrw-rw-rw- 2025-05-15 11:24:11
Edit Download
260 B lrw-rw-rw- 2025-05-15 11:24:11
Edit Download
589 B lrw-rw-rw- 2025-04-08 04:12:56
Edit Download
175 B lrw-rw-rw- 2025-04-08 04:12:56
Edit Download
529 B lrw-rw-rw- 2025-05-15 11:24:11
Edit Download
134 B lrw-rw-rw- 2025-04-08 10:55:28
Edit Download
1.26 KB lrw-rw-rw- 2025-04-19 04:22:17
Edit Download
400 B lrw-rw-rw- 2025-04-08 04:12:56
Edit Download
827 B lrw-rw-rw- 2025-04-19 04:22:17
Edit Download
1.64 KB lrw-rw-rw- 2025-04-19 04:22:17
Edit Download
1.00 KB lrw-rw-rw- 2025-04-08 04:12:56
Edit Download
346 B lrw-rw-rw- 2025-04-08 04:12:56
Edit Download
421 B lrw-rw-rw- 2025-04-08 04:12:56
Edit Download
1.46 KB lrw-rw-rw- 2025-04-19 04:22:17
Edit Download
212 B lrw-rw-rw- 2025-04-08 04:12:56
Edit Download
1004 B lrw-rw-rw- 2025-04-19 04:22:17
Edit Download
427 B lrw-rw-rw- 2025-04-08 04:12:56
Edit Download
1.23 KB lrw-rw-rw- 2025-04-19 04:22:17
Edit Download
776 B lrw-rw-rw- 2025-04-08 04:12:56
Edit Download
223 B lrw-rw-rw- 2025-04-08 04:12:56
Edit Download
215 B lrw-rw-rw- 2025-04-19 04:22:17
Edit Download
299 B lrw-rw-rw- 2025-04-15 10:33:57
Edit Download
1.74 KB lrw-rw-rw- 2025-04-19 04:22:17
Edit Download
1006 B lrw-rw-rw- 2025-04-08 04:12:56
Edit Download
344 B lrw-rw-rw- 2025-04-08 04:12:56
Edit Download
417 B lrw-rw-rw- 2025-04-08 04:12:56
Edit Download
439 B lrw-rw-rw- 2025-04-08 04:12:56
Edit Download
219 B lrw-rw-rw- 2025-04-08 04:12:56
Edit Download
3.78 KB lrw-rw-rw- 2025-04-19 04:22:17
Edit Download
1.04 KB lrw-rw-rw- 2025-04-19 04:22:17
Edit Download
333 B lrw-rw-rw- 2025-04-08 04:12:56
Edit Download
653 B lrw-rw-rw- 2025-04-08 04:12:56
Edit Download
340 B lrw-rw-rw- 2025-04-08 04:12:56
Edit Download
276 B lrw-rw-rw- 2025-04-08 04:12:56
Edit Download
1.09 KB lrw-rw-rw- 2025-04-13 07:02:31
Edit Download
963 B lrw-rw-rw- 2025-04-13 07:02:31
Edit Download
1.42 KB lrw-rw-rw- 2025-05-08 11:48:26
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).