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

时间:2023-03-08 18:10:11
[moka同学笔记]二、Yii2.0课程笔记(魏曦老师教程)

一、在标签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的使用位置分析

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

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