2016-03-25 12 views
0

Ich habe 2 Tabelle beigetreten, jetzt möchte ich den Namen der Kategorien im Feld <th>Categories name</th> anzeigen. Wie kann ich das mit <?php foreach ($posts as $post){ ?> machen? Rendere ich wie <?=$post->categories.name?>? Ich stecke hier fest.Yii2 Anzeige Daten nach Join

Vielen Dank.

Mein Controller:

public function actionIndex() 
{ 

    $query = posts::find()->leftJoin('categories', 'posts.cate_id = categories.id'); 
    $cates = Categories::find()->all(); 
    $posts= $query->orderBy(['create_date' => SORT_DESC])->all(); 
    $images = Images::find()->all(); 
    $searchModel = new PostsSearch(); 
    $dataProvider = $searchModel->search(Yii::$app->request->queryParams); 

    return $this->render('index', [ 
     'posts' => $posts, 
     'dataProvider' => $dataProvider, 
      'searchModel' => $searchModel, 
      'cates' => $cates, 
      'images' => $images, 
    ]); 
} 

Meine Ansicht:

<thead> 
<tr> 
    <th>ID</th> 
    <th>Name</th> 
    <th>Create Date</th> 
</thead> 
<tbody> 
<?php foreach ($posts as $post){ ?> 
<tr> 
    <td><?= $post->id ?></td> 

    <th><?= Html::a($post->name, ['post/view', 'id'=>$post->id]) ?></th> 

    <td><?= $post->create_date ?></td> 

    </tr> 
    <?php } ?> 
    </tbody> 

Antwort

0

Schleife durch die Kategorien ebenso wie mit Beiträgen. Es ist das gleiche Prinzip.

foreach($posts as $post) 
    foreach($post->categories as $category) 
     echo $category->name; 

Dies basiert auf der Annahme, dass Sie die richtigen Beziehungen im Modell definiert haben.

I.e. durch Fremdschlüssel:

public function getCategories() 
{ 
    return $this->hasMany(Category::className(), ['post_id' => 'id']); 
} 

Sie scheinen es anders herum zu haben. Sie können category_id im Post haben, aber dann ist es auf eine Kategorie beschränkt. Es sei denn, Sie speichern die IDs in dem von einem Delimeter getrennten Feld. Aber diese Option erfordert ein bisschen mehr Arbeit.