Ответы пользователя по тегу Yii
  • Как отрисовать дерево Nested sets имея все записи?

    @Aleksei-22
    Вот такая функция возвращает всё дерево в виде многомерного массива с добавлением parent_id каждому элементу для удобства. Работает с любым количеством деревьев и любой степенью вложенности.
    Далее из этого массива можно что угодно нарисовать.
    Если в вашей таблице используется под уровни 'depth' вместо 'lvl', поменяйте
    $l = $node['lvl']; на $l = $node['depth']; Соответственно также $r = $node['root']; на $r = $node['tree'], если вместо 'root' в базе 'tree'.
    Если таблица без использования множества деревьев, тогда $r = 1;
    Используется один запрос к базе. Перебор уровня вложенности можно менять с помощью $level.
    $category = CategoryMenu::find()->orderBy('root, lft')->indexBy('id')->asArray()->all();
    
    function getTree($category, $level = 0) {
       $tree = []; $_id = [];
       foreach ($category as $id=>&$node) {
          $l = $node['lvl']; $p = $l-1; $r = $node['root']; $_id[$r][$l] = $id;
          if ($l == $level) {
             $tree[$id] = &$node;
          } elseif ($l > $level) {
             $category[$_id[$r][$p]]['childs'][$id] = &$node;
             $node['parent_id'] = $category[$_id[$r][$p]]['id'];
          }
       }
       return $tree;
    }
    Ответ написан
    Комментировать
  • Как правильно отфильтровать товары, значения свойств которых(цвет, размер и т.п.) находятся в одной колонке таблицы?

    @Aleksei-22 Автор вопроса
    foreach ($filter_c as $q):
                $query->joinWith(['valueProducts '.$q.'', 'valueProducts.value v'.$q.''])
                    ->andFilterWhere(['v'.$q.'.value' => $this->$q]);
         endforeach;
    Ответ написан
    Комментировать