230 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			PHP
		
	
	
		
		
			
		
	
	
			230 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			PHP
		
	
	
|  | <?php | ||
|  | 
 | ||
|  | 
 | ||
|  | namespace app\common\model\community; | ||
|  | 
 | ||
|  | 
 | ||
|  | use app\common\basics\Models; | ||
|  | use app\common\enum\CommunityArticleEnum; | ||
|  | use app\common\model\goods\Goods; | ||
|  | use app\common\model\shop\Shop; | ||
|  | use app\common\model\user\User; | ||
|  | 
 | ||
|  | /** | ||
|  |  * 种草社区文章 | ||
|  |  * Class CommunityCategory | ||
|  |  * @package app\common\model\content | ||
|  |  */ | ||
|  | class CommunityArticle extends Models | ||
|  | { | ||
|  | 
 | ||
|  | 
 | ||
|  |     /** | ||
|  |      * @notes 关联作者信息 | ||
|  |      * @return \think\model\relation\HasOne | ||
|  |      * @author 段誉 | ||
|  |      * @date 2022/4/29 17:59 | ||
|  |      */ | ||
|  |     public function user() | ||
|  |     { | ||
|  |         return $this->hasOne(User::class, 'id', 'user_id'); | ||
|  |     } | ||
|  | 
 | ||
|  | 
 | ||
|  |     /** | ||
|  |      * @notes 关联文章图片 | ||
|  |      * @return \think\model\relation\HasMany | ||
|  |      * @author 段誉 | ||
|  |      * @date 2022/4/29 11:29 | ||
|  |      */ | ||
|  |     public function images() | ||
|  |     { | ||
|  |         return $this->hasMany(CommunityArticleImage::class, 'article_id', 'id'); | ||
|  |     } | ||
|  | 
 | ||
|  | 
 | ||
|  |     /** | ||
|  |      * @notes 关联话题 | ||
|  |      * @return \think\model\relation\HasOne | ||
|  |      * @author 段誉 | ||
|  |      * @date 2022/5/6 14:37 | ||
|  |      */ | ||
|  |     public function topic() | ||
|  |     { | ||
|  |         return $this->hasOne(CommunityTopic::class, 'id', 'topic_id'); | ||
|  |     } | ||
|  | 
 | ||
|  | 
 | ||
|  |     /** | ||
|  |      * @notes 关联商品相关信息 | ||
|  |      * @param $value | ||
|  |      * @param $data | ||
|  |      * @return array|\think\Collection | ||
|  |      * @throws \think\db\exception\DataNotFoundException | ||
|  |      * @throws \think\db\exception\DbException | ||
|  |      * @throws \think\db\exception\ModelNotFoundException | ||
|  |      * @author 段誉 | ||
|  |      * @date 2022/5/6 10:05 | ||
|  |      */ | ||
|  |     public function getGoodsDataAttr($value, $data) | ||
|  |     { | ||
|  |         if (empty($data['goods'])) { | ||
|  |             return []; | ||
|  |         } | ||
|  | 
 | ||
|  |         $result = Goods::field(['id', 'name', 'image']) | ||
|  |             ->where(['status' => 1, 'del' => 0]) | ||
|  |             ->whereIn('id', $data['goods']) | ||
|  |             ->select(); | ||
|  | 
 | ||
|  |         return $result; | ||
|  |     } | ||
|  | 
 | ||
|  | 
 | ||
|  |     /** | ||
|  |      * @notes 关联店铺信息 | ||
|  |      * @param $value | ||
|  |      * @param $data | ||
|  |      * @return array|\think\Collection | ||
|  |      * @throws \think\db\exception\DataNotFoundException | ||
|  |      * @throws \think\db\exception\DbException | ||
|  |      * @throws \think\db\exception\ModelNotFoundException | ||
|  |      * @author 段誉 | ||
|  |      * @date 2022/5/6 17:55 | ||
|  |      */ | ||
|  |     public function getShopDataAttr($value, $data) | ||
|  |     { | ||
|  |         if (empty($data['shop'])) { | ||
|  |             return []; | ||
|  |         } | ||
|  | 
 | ||
|  |         $result = Shop::field(['id', 'name', 'logo']) | ||
|  |             ->where(['is_freeze' => 0, 'del' => 0, 'is_run' => 1]) | ||
|  |             ->whereIn('id', $data['shop']) | ||
|  |             ->select(); | ||
|  | 
 | ||
|  |         return $result; | ||
|  |     } | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  |     /** | ||
|  |      * @notes 状态属性 | ||
|  |      * @param $value | ||
|  |      * @param $data | ||
|  |      * @return string|string[] | ||
|  |      * @author 段誉 | ||
|  |      * @date 2022/5/9 18:13 | ||
|  |      */ | ||
|  |     public function getStatusDescAttr($value, $data) | ||
|  |     { | ||
|  |         return  CommunityArticleEnum::getStatusDesc($data['status']); | ||
|  |     } | ||
|  | 
 | ||
|  | 
 | ||
|  |     /** | ||
|  |      * @notes 文章所选店铺格式化 | ||
|  |      * @param $value | ||
|  |      * @param $data | ||
|  |      * @return false|string|string[] | ||
|  |      * @author 段誉 | ||
|  |      * @date 2022/4/29 10:55 | ||
|  |      */ | ||
|  |     public function getShopAttr($value, $data) | ||
|  |     { | ||
|  |         return $this->formattingData($value, 'explode'); | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * @notes 文章所选店铺格式化 | ||
|  |      * @param $value | ||
|  |      * @param $data | ||
|  |      * @return false|string|string[] | ||
|  |      * @author 段誉 | ||
|  |      * @date 2022/4/29 10:55 | ||
|  |      */ | ||
|  |     public function setShopAttr($value, $data) | ||
|  |     { | ||
|  |         return $this->formattingData($value, 'implode'); | ||
|  |     } | ||
|  | 
 | ||
|  | 
 | ||
|  |     /** | ||
|  |      * @notes 文章所选商品格式化 | ||
|  |      * @param $value | ||
|  |      * @param $data | ||
|  |      * @return false|string|string[] | ||
|  |      * @author 段誉 | ||
|  |      * @date 2022/4/29 10:55 | ||
|  |      */ | ||
|  |     public function getGoodsAttr($value, $data) | ||
|  |     { | ||
|  |         return $this->formattingData($value, 'explode'); | ||
|  |     } | ||
|  | 
 | ||
|  | 
 | ||
|  |     /** | ||
|  |      * @notes 文章所选商品格式化 | ||
|  |      * @param $value | ||
|  |      * @param $data | ||
|  |      * @return false|string|string[] | ||
|  |      * @author 段誉 | ||
|  |      * @date 2022/4/29 10:55 | ||
|  |      */ | ||
|  |     public function setGoodsAttr($value, $data) | ||
|  |     { | ||
|  |         return $this->formattingData($value, 'implode'); | ||
|  |     } | ||
|  | 
 | ||
|  | 
 | ||
|  |     /** | ||
|  |      * @notes 格式化数据 | ||
|  |      * @param $params | ||
|  |      * @param $operation | ||
|  |      * @return array|string | ||
|  |      * @author 段誉 | ||
|  |      * @date 2022/5/6 9:50 | ||
|  |      */ | ||
|  |     protected function formattingData($params, $operation) | ||
|  |     { | ||
|  |         if (empty($params) || !in_array($operation, ['explode', 'implode'])) { | ||
|  |             return $operation == 'explode' ? [] : $params; | ||
|  |         } | ||
|  | 
 | ||
|  |         if ('explode' == $operation) { | ||
|  |             return array_map('intval', explode(',', $params)); | ||
|  |         } | ||
|  |         return implode(',', $params); | ||
|  |     } | ||
|  | 
 | ||
|  | 
 | ||
|  |     /** | ||
|  |      * @notes 增加点赞数量 | ||
|  |      * @param $id | ||
|  |      * @return mixed | ||
|  |      * @author 段誉 | ||
|  |      * @date 2022/5/9 15:34 | ||
|  |      */ | ||
|  |     public static function incLike($id) | ||
|  |     { | ||
|  |         return self::where(['id' => $id])->inc('like')->update(); | ||
|  |     } | ||
|  | 
 | ||
|  | 
 | ||
|  |     /** | ||
|  |      * @notes 减少点赞数量 | ||
|  |      * @param $id | ||
|  |      * @return mixed | ||
|  |      * @author 段誉 | ||
|  |      * @date 2022/5/9 15:37 | ||
|  |      */ | ||
|  |     public static function decLike($id) | ||
|  |     { | ||
|  |         $where = [ | ||
|  |             ['id', '=', $id], | ||
|  |             ['like', '>=', 1] | ||
|  |         ]; | ||
|  |         return self::where($where)->dec('like')->update(); | ||
|  |     } | ||
|  | 
 | ||
|  | } |