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; }
文章创建到这里也就完成了。接下来回继续分享文章详情和文章列表的实现教程。