2017-04-21 51 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 
    } 
} 
?> 

根據您的需求變化。