简体   繁体   中英

How to get all children categories recursively by parent category in Laravel

I'm using Laravel 7.x and I need a proper way to get all the children + children... categories of a parent category.

category table;

$table->id();
$table->integer('parent_id')->default(0)->unsigned();
$table->boolean('is_active')->default(true);
$table->integer('sort_order')->default(1)->unsigned();
$table->timestamp('created_at')->default(DB::raw('CURRENT_TIMESTAMP'));
$table->timestamp('updated_at')->default(DB::raw('CURRENT_TIMESTAMP'));
$table->timestamp('deleted_at')->nullable();

category_translation table;

$table->id();
$table->integer('category_id')->index()->unsigned();
$table->integer('language_id')->index()->unsigned();
$table->string('title');

Example category structure;

- Programming (top category)

-- Web
---- Php
---- Ruby
---- Perl

-- Mobile
---- Objective C
---- Java
---- Swift

My purpose is to delete all sub + sub + sub categories when I delete a parent category. I need to get recursively all the sub categories by giving a parent ID to delete all of them.

I made some searches to find a way but nothing was helpful for me.

I hope I can find a solution here.

Thank you.

I think you can add a function like this (if you want a on cascade effect on soft deletes): SubCategory.php

 public static function boot ()
        {
            parent::boot();
    
            self::deleting(function (SubCategory $sub_category) {
    
                foreach ($sub_category->sub_sub_category as $sub_sub_category)
                {
                    $sub_sub_category->delete();
                }
            });
        }

Same for Category.php , except that $sub_category will be $category, and $sub_sub_cateory will be $sub_category.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM