strezinov
@strezinov
Учусь на програмиста

Удаления цепочек категории?

Когда удаляется категория 1, то по цепочки должны удалится все за ней категории, нужно сделать рекурсию, но не понимаю как???

4101bb548e.png

БД
id | parent_id | title
1 |        0        | Категория 1
2 |        1        | Категория  1.1
3 |        2        | Категория  1.1.1
4 |        3        | Категория  1.1.1.1
------------------------------------------
5 |        0        | Категория  2
6 |        5        | Категория  2.2
7 |        6        | Категория  2.2.2


В контроллере, тут полный бред
public function actionDelete($id)
    {
            //$this->findModel($id)->delete();
            $parent = Category::find()->where(['parent_id' => $id])->one();
            if ($parent) {
                $child1 = Category::find()->where(['parent_id' => $parent->id])->one();
                $child2 = Category::find()->where(['parent_id' => $child1->id])->one();

                VarDumper::dump($child1->id,11,1);
                VarDumper::dump($child1->parent_id,11,1);
                VarDumper::dump($child2->id,11,1);
                VarDumper::dump($id,11,1);die();
            }

        return $this->redirect(['index']);
    }
  • Вопрос задан
  • 183 просмотра
Пригласить эксперта
Ответы на вопрос 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Ответ зависит от того как Вы храните свое дерево категорий. Способов хранения много (adjustment list, Nested Sets и т.д.), архитектура бд при этом совершенно разная, так что и решения будут принципиально разниться. А У Вас может быть еще и свой кастомный вариант. Так что прежде чем задавать такой вопрос, надо расписать свою архитектуру БД.

Но я уверен, что у Вас уже есть рекурсия необходимая, при постройке дерева на фронте. Так что не стоит изобретать велосипед. Хотя обычно юзают готовые классы типа https://github.com/creocoder/yii2-nested-sets и тогда вообще проблем нет никаких, так как методы уже все реализованы.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы