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