2016-03-25 2 views
0

Я присоединился к 2 таблице, теперь я хочу показать название категорий в поле <th>Categories name</th>. Как я могу это сделать с <?php foreach ($posts as $post){ ?>? Делаю ли я, как <?=$post->categories.name?>? Я застрял здесь.Yii2 данные дисплея после присоединения

спасибо.

Мой контроллер:

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, 
    ]); 
} 

Мое мнение:

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

ответ

0

Цикл по категориям так же, как и сообщения. Это тот же принцип.

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

Это основано на предположении, что вы определили правильные отношения в модели.

I.e. через внешний ключ:

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

Кажется, у вас это наоборот. Вы можете иметь category_id в сообщении, но тогда его можно ограничить одной категорией. Если вы не храните идентификаторы в поле, разделенном на делиметр. Но для этого варианта требуется немного больше работы.

Смежные вопросы