Дерево категорий Laravel

Сидинг БД таблицы категорий

Мграции и сиддинг
create_categories_table
public function up()
    {
        Schema::create('categories', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->integer('p_id');
            $table->timestamps();
        });
    }
seed.php
        Categories::factory()->create([
            'id' => 1,
            'name' => 'Главная',
            'p_id' => 0,
        ]);
        Categories::factory()->create([
                'id' => 2,
                'name' => 'Компьютеры',
                'p_id' => 1,
        ]);
        Categories::factory()->create([
                'id' => 3,
                'name' => 'Телефоны',
                'p_id' => 1,
        ]);
        Categories::factory()->create([
                'id' => 4,
                'name' => 'Планшеты',
                'p_id' => 1,
        ]);
        Categories::factory()->create([
                'id' => 5,
                'name' => 'Ноутбуки',
                'p_id' => 2,
        ]);
        Categories::factory()->create([
                'id' => 6,
                'name' => 'ПК',
                'p_id' => 2,
        ]);
        Categories::factory()->create([
                'id' => 7,
                'name' => 'Lenovo',
                'p_id' => 5,
        ]);
        Categories::factory()->create([
                'id' => 8,
                'name' => 'Apple',
                'p_id' => 5,
        ]);
        Categories::factory()->create([
                'id' => 9,
                'name' => 'Asus',
                'p_id' => 5,
        ]);
        Categories::factory()->create([
                'id' => 10,
                'name' => 'Acer',
                'p_id' => 5,
        ]);
        Categories::factory()->create([
                'id' => 11,
                'name' => 'Apple',
                'p_id' => 3,
        ]);
        Categories::factory()->create([
                'id' => 12,
                'name' => 'Samsung',
                'p_id' => 3,
        ]);
        Categories::factory()->create([
                'id' => 13,
                'name' => 'Nokia',
                'p_id' => 3,
        ]);
        Categories::factory()->create([
                'id' => 14,
                'name' => 'Huawei',
                'p_id' => 3,
        ]);
        Categories::factory()->create([
                'id' => 15,
                'name' => 'Xiaomi',
                'p_id' => 3,
        ]);
        Categories::factory()->create([
                'id' => 16,
                'name' => 'Apple',
                'p_id' => 4,
        ]);
        Categories::factory()->create([
                'id' => 17,
                'name' => 'Xiaomi',
                'p_id' => 4,
        ]);
        Categories::factory()->create([
                'id' => 18,
                'name' => 'Apple',
                'p_id' => 6,
        ]);

Модель category

Контроллер

Первый вариант

Второй вариант (предпочтительный) через жадную загрузку отношений самих на себя

Last updated