Laravel Türkiye Discord Kanalı Forumda kod paylaşılırken dikkat edilmesi gerekenler!Birlikte proje geliştirmek ister misiniz?
  • Yardım
  • Laravel 8 Sınırsız kategori ve alt kategori sistemi hk.

Merhaba, herkese iyi günler dilerim. Forumlardan araştırarak elde ettiğim bir kategori sistemi bulunmakta. Yalnız bu kategori sistemi yaklaşık 520 adet veritabanı sorgusu yapmakta. Bu sorunu sizce nasıl çözebilirim? Kodlar;
Model;

    protected $appends = [
        'getParentsTree',
    ];

    public function children()
    {
        return $this->hasMany(Category::class, 'parent_id')->orderBy('id', 'ASC');
    }
    public static function getParentsTree($category, $title)
    {
        if ($category->parent_id == 0) {
            return $title;
        }
        $parent = Category::findOrFail($category->parent_id);
        $title = $parent->title . ' > ' . $title;

        return Category::getParentsTree($parent, $title);
    }

View'e aktarım;

view()->share('categorys', Category::where('parent_id', 0)->with('children')->orderBy('id', 'ASC')->get());

View;

@foreach ($categorys as $category)
    @if (count($category->children))
    <li>
        <ul class="dropdown-c">
            <li>
                <a class="cwCategoryFontSize85" href="{{ route('Web.category.products', $category->slug) }}">{{ $category->title }}</a>
                <ul>
                    @include('Web.Category.category', ['children'=>$category->children])
                </ul>
            </li>
        </ul>
        @else
        <ul class="dropdown-c">
            <li>
                <a class="cwCategoryFontSize85" href="{{ route('Web.category.products', $category->slug) }}">{{ $category->title }}</a>
            </li>
        </ul>
    @endif
@endforeach

Web.Category.category;

@foreach ($children as $item)
        @if (count($item->children))
            <li>
                <a href="{{ route('Web.category.products', $item->slug) }}">{{ $item->title }} <i class="fi-rs-angle-right"></i></a>
                <ul class="level-menu level-menu-modify">
                    @include('Web.Category.category', ['children'=>$item->children])
                </ul>
            </li>
        @else
            <li><a href="{{ route('Web.category.products', $item->slug) }}">{{ $item->title }}</a></li>
        @endif
@endforeach

Teşekkür ederim.

ibrahim Hocam kullandım ama sonuç değişmedi aynı sorgu sayısı geldi yine müsaitseniz örnek verebilir misiniz? Teşekkür ederim.

    mgsmus Hocam paketi yaklaşık 3 paket kurdum ve sonuç değişmedi. Büyük ihtimal yanlış kullanıyorum fakat bu sorun için başka bir çözüm buldum. Kategorileri html data şeklinde yazdırıp cacheye atıyorum. View üzerinde {!! Cache::get(‘data’) !!} şeklinde yazdırıyorum. Sizce sorun yaşarmıyım?

    mgsmus

      mkeremcansev Kategorilerin ne sıklıkla değiştiğine bağlı. Çok nadiren değişiyorlarsa sıkıntı yaşamazsınız. Sizin kullandığınız hiyerarşik yapının adı Adjacency List. Forumda aratın, bir çok örnek var ya da böyle araştırın.

        mgsmus Hocam kategoriler çok nadir değişiyor. Yaklaşık 540 tane kategoriyi ul li yapısı ile beraber cacheye alıyorum. Tekrardan bir ekleme, güncelleme veya silme işlemi olduğunda Cache::forget(‘data’) yapıp Cache put ile tekrardan oluşturuyorum. Söylediğiniz hiyerarşik yapıyı araştıracağım hocam. Çok teşekkür ederim ❤️