Yii2列出类别中的项目

时间:2017-04-21 01:59:58

标签: yii yii2 yii2-basic-app

我的控制器

SomeonesName['online']

我的观点

public function actionIndex()
{
    $query = Documents::find();
    $docs = $query->orderBy('cate_id ASC')->all();
    return $this->render('index', [
        'docs' => $docs,
    ]);
}

我的观点看起来像

第1类

  • 菜单项目标题1

第1类

  • 菜单项目标题2

第2类

  • 菜单项标题3

我希望它显示

类别1

  • 菜单项目标题1
  • 菜单项目标题2

类别2

  • 菜单项标题3

请帮助我。

谢谢!

2 个答案:

答案 0 :(得分:1)

对于您的任务,使用Yii ArrayHelper可以非常轻松地解决此问题。

点击此链接http://www.yiiframework.com/doc-2.0/guide-helper-array.html

您可以使用ArrayHelper::index方法根据特定键/列对记录进行分组。

在您的情况下,您必须使用'cate_id'(它引用您的类别ID)对记录进行分组。

   //dont forget to import ArrayHelper before using it. 
   //use \yii\helpers\ArrayHelper.
   $catList = ArrayHelper::index($docs, null, 'cate_id');

上面的代码将生成分组数组。例如....

   [
        1 =>[
              ['Menu Item Title 1','other column data','....'],
              ['Menu Item Title 2','other column data','....']
        ],
        2 =>[
              ['Menu Item Title 3','other column data','....'],
              ['Menu Item Title 4','other column data','....']
        ]

   ]

现在你遍历这个数组/数组对象。

     <?php
     foreach($catList as $cate_id => $catItems)
     {
        $cate = app\models\Categories::find()->where(['id'=>$cate_id])->one();
        echo '<h4>'.$cate->title.'</h4>';
        foreach($catItems as $catItem)
        {

           echo '<p>'.Html::a($catItem['title'], ['documents/view', 'id'=>$catItem['id']]).'</p>';
        }

     }
     ?>

在掌握Yii代码之后,尝试以Yii方式编码。也就是说,在这种情况下,不要在View中编写查询。

您可以使用模型relation来获取类别的名称。

答案 1 :(得分:0)

视图中的更改:

<?php 
foreach ($docs as $doc) {  
  $cate = app\models\Categories::find()->where(['id'=>$doc->cate_id])->all();?> // query for all records
  ?>
  <h4><?=$doc->title?></h4>
  <?php
  foreach ($cate as $cat {  
  ?>
  <p><?= Html::a($cat->title, ['documents/view', 'id'=>$cat->id]) ?></p>
  <?php
  }
}
?>

根据您的需要进行更改。