2017-04-21 32 views
0

我控制器一个类别里面Yii2列表项

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

我的观点

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

<?php } ?> 

有了这个我看的样子

1类

  • 菜单项目名称1

类别1

  • 菜单项名称2

类别2

  • 菜单项目标题3

我希望它显示

分类1

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

分类2

  • 菜单项标题3

请帮助我。

谢谢!

回答

1

对于您的任务,使用Yii ArrayHelper很容易解决这个问题。

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

您可以将根据使用ArrayHelper::index方法的特定键/列的记录。

在你的情况下,你必须用'cate_id'(它引用你的类别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来获取类别的名称。

+0

它的工作。非常感谢! –

+0

我真的不明白“foreach($ catList as $ cate_id => $ catItems)”部分。 你能解释一下吗?谢谢 –

+0

print $ catList来理解它。 '的print_r($ catList)'。 – Hearaman

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 
    } 
} 
?> 

根据您的需求变化。