1、创建tags表单模型
<?php
namespace frontend\models;
/**
* tags 表单模型
*/
use yii\base\Model;
class TagsForm extends Model
{
public $id;
public $tags;
public function rules()
{
return [
['tags','required'],
['tags','each','rules'=>['string']],
];
}
}
2、用gii创建tags model模型(记得修改TagsModel 的基础继承类)

3、用gii创建relation_post_tags model模型(记得修改TagsModel 的基础继承类)

3、保存tags标签事件方法实现
/**
* 保存标签
* @param $event
* @throws yii\db\Exception
*/
public function _eventAddTag($event)
{
$tag = new TagsForm();
$tag -> tags = $event->data['tags'];
$tagids = $tag -> saveTags();
//删除原先的标签关联关系
RelationPostTagsModel::deleteAll(['post_id'=>$event->data['id']]);
//批量保存文章标签关联关系
if(!empty($tagids)) {
foreach ($tagids as $k => $id) {
$row[$k]['post_id'] = $this->id;
$row[$k]['tag_id'] = $id;
}
//批量插入
$res=(new Query())->createCommand()->batchInsert(RelationPostTagsModel::tableName(),['post_id','tag_id'],$row)->execute();
if (!$res)
throw new Exception('标签关联关系保存失败');
}
}
4、tagForm 表单中saveTags方法实现 遍历tags集合,一一保存tag
/**
* 保存标签集合
* @return array
*/
public function saveTags()
{
$ids=[];
if (!empty($this->tags)){
foreach ($this->tags as $tag){
$ids[] = $this->_saveTag($tag);
}
}
return $ids;
}
/**
* 单个标签保存标签
* @param $tag
* @return mixed
* @throws Exception
*/
private function _saveTag($tag)
{
$model=new TagsModel();
//查询表中是否已有标签
$res=$model->find()->where(['tag_name'=>$tag])->one();
//若表中无标签则创建标签
if (!$res){
$model->tag_name=$tag;
$model->post_num=1;
if (!$model->save()){
throw new Exception('标签保存失败!');
}
return $model->id;
}else{
$res->updateCounters(['post_num'=>1]);
}
return $res->id;
}

文章创建到这里也就完成了。接下来回继续分享文章详情和文章列表的实现教程。
