代码之家  ›  专栏  ›  技术社区  ›  Masoud92m

如何在yii2中显示具有子类别的类别

  •  2
  • Masoud92m  · 技术社区  · 6 年前

    我有一个以类别名称命名的表,其中包含列ID、父级ID和标题。 默认父级\u id为0,如果类别是子类别,则在父级\u id中输入父级id。

    我用ActiveRecord得到所有类别 $category = Category::find()->asArray()->all(); 我的分类如下:

    $category = [
        [
            'id' => 1,
            'parent_id '=> 0,
            'title' => 'one',
        ],
        [
            'id' => 2,
            'parent_id '=> 1,
            'title' => 'two',
        ],
        [
            'id' => 3,
            'parent_id '=> 1,
            'title' => 'three',
        ],
        [
            'id' => 4,
            'parent_id '=> 0,
            'title' => 'four',
        ],
        [
            'id' => 5,
            'parent_id '=> 0,
            'title' => 'five',
        ],
    
    ];
    

    我想把它打印成:

    <ul>
        <li>
            one
            <ul>
            <li>two</li>
            <li>three</li>
            </ul>
        </li>
        <li>four</li>
        <li>five</li>
    </ul>
    

    最好的方法是什么?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Insane Skull    6 年前

    首先选择所有父级:

    $category = Category::find()->with('childrens')->where(['parent_id'=>0])->all();
    

    在类别模型中编写一个关系,如下所示:

    public function getChildrens()
    {
      return $this->hasMany(Category::className(), ['parent_id' => 'id'])>andOnCondition('parent_id!=:pid',[':pid' =>0]);;
    }
    

    <ul>
    
        <?php foreach($category as $cat)?>
            <li>
                <?=$cat->title?>
        <?php if($cat->childrens){?>
    
                <ul>
        <?php foreach($cat->childrens as $child){?>
                  <li><?=$child->title?></li>
    
        <?php }?>
                </ul>
        <?php } ?>
    
            </li>
        <?php }?>
    
    
    </ul>