1 Min Read

Menggunakan Laravel Nestedset Relational Database Package

iman-sugirman Iman Sugirman

Membuat Tree Relation memang sangat sulit dalam membangun sistem relasi ini, dan untungnya saya menemukan package Laravel Nestedset dan lebih mudah dalam membangun relasi Anak dan Orang Tua dalam satu table database yang anda inginkan. Baiklah sekarang kita akan mulai dengan instalasinya

Install Package Nestedset :

composer require kalnoy/nestedset

Lalu tambahkan schema di table yang anda inginkan misalnya disini akan menggunakan tabel categories dan nanti akan seperti ini :

...
use Kalnoy\Nestedset\NestedSet;

Schema::create('table', function (Blueprint $table) {
    ...
    NestedSet::columns($table);
});

Dan jangan lupa tambahkan NodeTrait di Model tabel categories yang tadi kita buat. misal model yang kita buat adalah App\Models\Category dan hasilnya seperti ini :

<?php
...
use Kalnoy\Nestedset\NodeTrait;

class Category extends Model {
    use NodeTrait;

    ...
}

Sekarang coba kita buat CategorySeeder.php dan edit seperti ini :

<?php
...
use App\Models\Category;

class Category extends Model
{
    public function run()
    {
        $node = Category::create([
            'name' => 'Foo',

            'children' => [
                [
                    'name' => 'Bar',

                    'children' => [
                        [ 'name' => 'Baz' ],
                    ],
                ],
            ],
        ]);
    }
}

Lalu seed dengan menggunakan command :

php artisan db:seed --class=CategorySeeder

Jika anda menginginkan dalam method store anda bisa anda gunakan seperti ini :

<?php
...
use App\Models\Category;
use Illuminate\Support\Str;
...
class CategoryController extends Controller
{
    public function store(CategoryCreateRequest $request)
    {
        ...
        if ($request->has('parent_id') && $request->parent_id !== null) {
            
            $node = Category::find($request->input('parent_id'));

            $cat = Category::create([
                'parent_id' => $request->input('parent_id'),
                'name' => $request->input('name'),
                'slug' => Str::slug($request->input('name')),
            ]);

            $node->appendNode($cat);


        } 
        ...
    }
}

Untuk Query Kategori tersebut anda bisa menggunakan seperti ini :

...
$cat = Category::find($id);

$cat_get = Category::withDepth()->find($cat->parent_id);

// Semua Member Yang berhubungan dengan pembeli dengan level diatasnya
$categories_parent = Category::whereAncestorOf($cat_get->id)->withDepth()->get();
...

Dan demikian tutorial saya tentang Menggunakan Laravel Nestedset Relational Database Package.

Happy Coding....