VerbAlexVlad
@VerbAlexVlad
Программист-любитель

Yii2. Как вывести все подкатегории?

5aa9275ba113f821808434.png
Есть таблица категорий.
К примеру я выбираю категорию "ОДЕЖДА", и следовательно, на странице должны отобразиться и "футболки" и "футболки-поло" и "футболки без рукавов" и "футболки с рукавами". Т.е все подкатегории, стоящие ниже выбранной.

Так вот, возможно ли одним запросом получить все эти категории (именно стоящие ниже)?
в итоге должно получиться:
Array
(
    [0] => Array
    (
        [id] => 1
        [name] => Одежда
    )

    [1] => Array
    (
        [id] => 2
        [name] => футболки
    )

    [2] => Array
    (
        [id] => 3
        [name] => футболки-поло
    )

    [3] => Array
    (
        [id] => 4
        [name] => футболки без рукавов
    )

    [4] => Array
    (
        [id] => 5
        [name] => футболки с рукавами
    )
)

Можно конечно рекурсией, но вдруг в yii есть спец способ.
Заранее спасибо!
  • Вопрос задан
  • 259 просмотров
Пригласить эксперта
Ответы на вопрос 4
qonand
@qonand
Software Engineer
Одним запросом Вы никак не решите эту задачу. У Вас такая модель хранения дерева категорий что здесь можно использовать только рекурсию. Хотите выбирать все одним запросом изменяйте модель хранения дерева, например на Nested Sets
Ответ написан
slo_nik
@slo_nik Куратор тега Yii
Добрый день.
Используйте связь модели саму на себя.
public function getParent()
{
   retun $this->hasMany(ModelName::class, ['parent_id' => 'id']);
}

В запросе используйте with('parent')
Подробней читайте здесь.
Ответ написан
@sidni
Php Developer
ну не все ж разработчикам фреймверка за программеров делать)))) думаю спец. Способов нет
Ответ написан
Комментировать
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Этот тип хранения называется Adjacency List.
Вот есть расширение для yii от PaulZi: https://github.com/paulzi/yii2-adjacency-list
Вот я его в видео разбирал: https://youtu.be/1BQrCbLTeuw
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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