Tablom
Schema::create('categories', function (Blueprint $table) {
$table->id();
$table->string('name', 60);
$table->unsignedBigInteger('parent_id')->nullable();
$table->timestamps();
$table->foreign('parent_id')->references('id')->on('categories')->onDelete('cascade');
});
Kategory modelimdeki ilişkiler böyle
public function parentCategory(): HasMany
{
return $this->hasMany(Category::class,'parent_id');
}
public function childCategory(): HasMany
{
return $this->hasMany(Category::class, 'parent_id')->with('parentCategory');
}
ilgili Controllertimde
public function index()
{
$categories = Category::whereNull('parent_id')->with('childCategory')->get();
return Inertia::render('index' ,[
'categories' => $categories
]);
}
bu şekilde indexe gönderiyorum ve index vue içinde
<script setup>
const props = defineProps({
categories: Array
})
</script>
<template>
<ol class="space-y-4 text-gray-500 list-decimal list-inside dark:text-gray-400">
<li v-for="anakategori in categories">
{{ anakategori.name }}
<ul class="pl-5 mt-2 space-y-1 list-disc list-inside">
<li v-for="altkategori in anakategori.child_category">
{{ altkategori.name }}
<ul class="pl-5 mt-2 space-y-1 list-disc list-inside">
<li v-for="childkategori in altkategori.parent_category">{{ childkategori.name }}</li>
</ul>
</li>
</ul>
</li>
</ol>
</template>
böyle bi iç içe döngülerle olayı çözerek istediğimi elde ediyorum ve debugbarda
6 sorgu gözüküyor ama aynı işi
https://github.com/staudenmeir/laravel-adjacency-list
bu paket tek sorguda hallediyor . Ben öğrenerek kendim yapma taraftarıyım ondan dolayı paket kullanmak istemiyorum
sorum şöyle , öncelikle bu 6 query sayısı fazlamı ? yada daha aza indirilebilirmi ?
ikinci sorum kaç kategoriye sahip olunca bu sorgu sayısını kafaya takmak gerek ?
örneğin 15 - 20 ana kategorim 3-5 alt kategorim ve bunların altındada 150 child kategorim var bunlar az rakamlarmı yoksa çok rakamlar sınıfına mı girer ?
ilgilenen olurmu bilmiyorum ama yukardaki paketin bu işi tek sorguda hallettiğini bu videonun 16:00 dakikasında gördüm
https://www.youtube.com/watch?v=-dj1xKG377c