php - 如何在 Yii2 中显示带有子类别的类别

标签 php arrays yii2

我有一个类别名称表,其中包含 id、parent_id 和 title 列。 默认parent_id为0,如果类别是子类别,则在parent_id中输入父id。

我使用此 $category = Category::find()->asArray()->all(); 获取带有 activerecord 的所有类别; 我的类别如下:

$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>

最好的方法是什么?

最佳答案

首先选择所有父级:

$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>

关于php - 如何在 Yii2 中显示带有子类别的类别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50562895/

相关文章:

php - yii2 如何防止 swiftmailer 将电子邮件发送到垃圾邮件文件夹

javascript - 在javascript中使用多维数组渲染二维 map

php - 在列中设置唯一值,如果不唯一,则将其他值向下移动

PHP 电子邮件客户端 - 克服缓慢的发送/接收

php - mysql表中保存图片源的方法

php - 如何在保持顺序的同时更改数组中的键?

javascript - Node 从 req.params.id 结果中取出数组

jquery - Yii2 Ajax 返回整个页面内容

php - 获取所有评论,包括其对帖子的投票

php - PayPal Rest API 发票 WebHook