简体   繁体   English

如何在 Laravel 中按父类别递归获取所有子类别

[英]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.我正在使用 Laravel 7.x,我需要一种正确的方法来获取父类别的所有孩子 + 孩子......类别。

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; category_translation 表;

$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.我需要通过提供父 ID 来递归地获取所有子类别以删除所有子类别。

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我认为您可以像这样添加 function (如果您想对软删除产生级联效果): 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.Category.php相同,除了 $sub_category 将是 $category,$sub_sub_category 将是 $sub_category。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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