TAY
笔记 · · 阅读 93

yii2 多对多获取文章标签

文章表:posts
中间表:taggable_taggables
标签表:taggable_tags

Post模型

public function getTags(){
    return $this->hasMany(Tag::className(),['tag_id'=>'tag_id'])->viaTable('taggable_taggables', ['taggable_id'=>'id'])->asArray();
}

文章内容页调用

// 控制器里获取的文章数据$post
$post = Post::findOne(['id'=>$id]);

// 视图里
<?php foreach($post->tags as $tag) {; ?>
<a href="/tag/<?php echo $tag['normalized'];?>" class="tag-item"><?php echo $tag['name'];?></a>
<?php };?>

列表带标签调用

// 控制器里获取的文章数据$posts
$query = Post::find()->with('tags');
$countQuery = clone $query;
$pages = new Pagination(['totalCount' => $countQuery->count(), 'pageSize' => '30']);
$posts = $query->orderBy(['created_at' => SORT_DESC])->offset($pages->offset) ->limit($pages->limit)->asArray()->all();
return $this->render('index', ['posts' => $posts, 'pages' => $pages]); 

// 视图里
<?php foreach ($posts as $post) { ?>
<div class="list-item">
    <h2><a href="/post/<?php echo $post['id']; ?>.html"><?php echo $post['title']; ?></a></h2>
    <div class="info">
        <span class="date"><?php echo $post['created_at']; ?></span>
        <?php if($post['tags']){ ?>
            <?php foreach($post['tags'] as $tag) {; ?>
            <a href="/tag/<?php echo $tag['normalized'];?>" class="tag-item"><?php echo $tag['name'];?></a>
            <?php };?>
        <?php };?>
    </div>
</div>
<?php };?>
目录