一、在标签tags的model中

    //使用正则表达式,把标签字符串转换成数组
public static function string2array($tags)
{
return preg_split('/\s*,\s*/',trim($tags),-1,PREG_SPLIT_NO_EMPTY);
} //把数组转换成字符串
public static function array2string($tags)
{
return implode(', ',$tags);
} //处理需要新增的标签
public static function addTags($tags)
{
if(empty($tags)) return ; foreach ($tags as $name)
{
$aTag = Tag::find()->where(['name'=>$name])->one();
$aTagCount = Tag::find()->where(['name'=>$name])->count(); if(!$aTagCount)
{
$tag = new Tag;
$tag->name = $name;
$tag->frequency = 1;
$tag->save();
}
else
{
$aTag->frequency += 1;
$aTag->save();
}
}
} //处理需要删除的标签
public static function removeTags($tags)
{
if(empty($tags)) return ; foreach($tags as $name)
{
$aTag = Tag::find()->where(['name'=>$name])->one();
$aTagCount = Tag::find()->where(['name'=>$name])->count(); if($aTagCount)
{
if($aTagCount && $aTag->frequency<=1)
{
$aTag->delete();
}
else
{
$aTag->frequency -= 1;
$aTag->save();
}
}
}
} //更新标签
public static function updateFrequency($oldTags,$newTags)
{
if(!empty($oldTags) || !empty($newTags))
{
$oldTagsArray = self::string2array($oldTags);
$newTagsArray = self::string2array($newTags); self::addTags(array_values(array_diff($newTagsArray,$oldTagsArray)));
self::removeTags(array_values(array_diff($oldTagsArray,$newTagsArray)));
}
}

二、标签model的使用位置分析

在post的model中

class Post extends \yii\db\ActiveRecord
{
private $_oldTags; public function afterFind()
{
parent::afterFind();
$this->_oldTags = $this->tags;
} public function afterSave($insert, $changedAttributes)
{
parent::afterSave($insert, $changedAttributes);
Tag::updateFrequency($this->_oldTags, $this->tags);
} public function afterDelete()
{
parent::afterDelete();
Tag::updateFrequency($this->tags, '');
}

[moka同学笔记]二、Yii2.0课程笔记(魏曦老师教程)的更多相关文章

  1. [moka同学笔记]三、Yii2.0课程笔记(魏曦老师教程)关联字段增加搜索

    关联字段增加搜索 post表关联adminuser表,通过post.author_id  adminuser.id关联,在YII2.0生成搜索,关联字段搜索时,需要输入关联字段author的id才能搜 ...

  2. [moka同学笔记]一、Yii2.0课程笔记(魏曦老师教程)

    第一节   第二节             课程内容     

  3. [moka同学笔记]八、Yii2.0课程笔记(魏曦老师教程)[授权]

    数据库表创建 在执行yii rbac/init之前,需要在 \console\controllers\RbacController.php中 <?php namespace console\co ...

  4. [moka同学笔记]七、Yii2.0课程笔记(魏曦老师教程)[新增管理员,重置密码]

  5. [moka同学笔记]六、Yii2.0课程笔记(魏曦老师教程)[徽章气泡]

  6. [moka同学笔记]五、Yii2.0课程笔记(魏曦老师教程)[审核功能]

  7. [moka同学笔记]四、Yii2.0课程笔记(魏曦老师教程)[匿名函数的使用操作]

    在评论页面中index.php中 [ 'attribute'=>'status', 'value'=>'status0.name', 'filter'=>Commentstatus: ...

  8. Yii2.0学习笔记:创建登录表单

    第一步:在model层创建一个EntryForm.php文件 复制以下代码,注意model的文件.方法.类的命名规范(大小写) <?php namespace app\models; use Y ...

  9. Yii2.0学习笔记:第一个页面Saying Hello

    Controller目录下创建TestController.php 复制下面代码,yii跟tp一样,全程命名空间 <?php namespace app\controllers; use yii ...

随机推荐

  1. js定时器的时间最小值-setTimeout、setInterval

    HTML5标准规定 setTimeout的最短时间间隔是4毫秒: setInterval的最短间隔时间是10毫秒,也就是说,小于10毫秒的时间间隔会被调整到10毫秒 书和MDC 在John Resig ...

  2. KnockoutJS 3.X API 第四章 表单绑定(9) value绑定

    目的 value绑定主要用于DOM元素给视图模型赋值用的.通常用于<input><select><textarea>等元素. value绑定与text绑定的区别在于 ...

  3. 探讨Nodejs中的作用域问题。

    在JS中有全局作用域和函数作用域,而在Nodejs中也自己的作用域,分为全局作用域(global)和模块作用域. js作用域: 以前学js的时候我们的全局对象是window,如: var a = 10 ...

  4. 总结整理 -- ruby系列

    基础学习 ruby -- 基础学习(一)项目文件夹说明 ruby -- 基础学习(二) 外键配置实现级联删除 ruby -- 基础学习(三)设置中国时区时间 ruby -- 基础学习(四)TimeDa ...

  5. Node出错导致运行崩溃的解决方案

    许多人都有这样一种映像,NodeJS比较快: 但是因为其是单线程,所以它不稳定,有点不安全,不适合处理复杂业务: 它比较适合对并发要求比较高,而且简单的业务场景. 在Express的作者的TJ Hol ...

  6. Spring MVC 学习总结(二)——控制器定义与@RequestMapping详解

    一.控制器定义 控制器提供访问应用程序的行为,通常通过服务接口定义或注解定义两种方法实现. 控制器解析用户的请求并将其转换为一个模型.在Spring MVC中一个控制器可以包含多个Action(动作. ...

  7. 重读 code complete 说说代码质量

    重读code complete 说说代码质量 2014年的第一篇文章本来计划写些过去一年的总结和新年展望,但是因为还有一些事情要过一阵才能完成,所以姑且不谈这个,说说最近重读code complete ...

  8. Azure China (3) 使用Visual Studio 2013证书发布Cloud Service至Azure China

    <Windows Azure Platform 系列文章目录> 之前有很多网友询问我如何通过VS发布Cloud Service至Azure China,这里我专门写篇文章,给大家详细介绍下 ...

  9. placeholder的兼容处理(jQuery下)

    这是一个老问题,结合前辈们的经验,需要处理的问题有一下几个. 1.只有输入框(input/textarea)下的palaceholder属性存在的时候才需要处理这类兼容 2.处理好输入框上焦点和是焦点 ...

  10. 索引深入浅出(3/10):聚集索引的B树结构

    在SQL Server里,有2种表是以存储为基础的.有聚集索引的表叫聚集表,没有聚集索引的表叫堆表.在上一篇文章,我们讨论了堆表的特性和存储结构.在这篇文章里,我们来看下聚集表. 有聚集索引的表叫聚集 ...