本文作者:心月

YII2高级版框架搭建完整博客系统教程——创建标签模型

心月IT博客 03-14
YII2高级版框架搭建完整博客系统教程——创建标签模型摘要:tags保存。

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

创建tags表单模型

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

创建tags model模型

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

创建relation_post_tags model模型

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('标签关联关系保存失败');
    }

}

保存tags标签事件方法实现

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

tags集合保存

单tag保存

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

文章版权及转载声明:

本文由 心月IT技术博客 博主整理于 03-14
若转载请注明原文及出处:https://www.xinyueseo.com/yii/186.html

分享到:
赞(
发表评论
快捷输入:

验证码

    评论列表 (有 0 条评论,人围观)参与讨论