erp/app/admin/logic/article/ArticleLogic.php
2024-02-18 17:31:11 +08:00

147 lines
4.3 KiB
PHP

<?php
namespace app\admin\logic\article;
use app\common\model\article\Article;
use app\common\logic\BaseLogic;
use app\common\model\article\ArticleContent;
use app\common\model\article\ArticleLabel;
use app\common\model\setting\Label;
use think\facade\Db;
/**
* 文章逻辑
* Class ArticleLogic
* @package app\admin\logic\article
*/
class ArticleLogic extends BaseLogic
{
/**
* @notes 添加文章
* @param array $params
* @return bool
* @author likeadmin
* @date 2024/02/05 16:36
*/
public static function add(array $params): bool
{
Db::startTrans();
try {
$res = Article::create([
'title' => $params['title'],
'state' => $params['state'],
'top' => $params['top']
]);
ArticleContent::create(['article_id' => $res->id, 'content' => $params['content']]);
if ($params['tag']) {
$label_id = Label::whereIn('label_name', $params['tag'])->column('id');
foreach ($label_id as $v) {
$find = ArticleLabel::where('label_id', $v)->find();
if (!$find) {
ArticleLabel::create(['article_id' => $res->id, ['label_id'] => $v]);
}
}
}
Db::commit();
return true;
} catch (\Exception $e) {
Db::rollback();
self::setError($e->getMessage());
return false;
}
}
/**
* @notes 编辑文章
* @param array $params
* @return bool
* @author likeadmin
* @date 2024/02/05 16:36
*/
public static function edit(array $params): bool
{
Db::startTrans();
try {
Article::where('id', $params['id'])->update([
'title_map' => $params['title_map'],
'title' => $params['title'],
'state' => $params['state'],
// 'pv' => $params['pv'],
'top' => $params['top'],
// 'create_user' => $params['create_user'],
// 'update_user' => $params['update_user']
]);
$find = ArticleContent::where('article_id', $params['id'])->find();
if ($find) {
ArticleContent::where('article_id', $params['id'])->update(['content' => $params['content']]);
} else {
ArticleContent::create(['article_id' => $params['id'], 'content' => $params['content']]);
}
if ($params['tag']) {
$arr = [];
$label_arr_id = [];
foreach ($params['tag'] as $vv) {
$arr[] = ['label_name' => $vv];
$label_id = Label::where('label_name', $vv)->value('id');
if ($label_id) {
$label_arr_id[] = $label_id;
} else {
$label = Label::create(['label_name' => $vv]);
$label_arr_id[] = $label->id;
}
}
foreach ($label_arr_id as $v) {
$find = ArticleLabel::where('label_id', $v)->find();
if (!$find) {
ArticleLabel::create(['article_id' => $params['id'], 'label_id' => $v]);
}
}
}
Db::commit();
return true;
} catch (\Exception $e) {
Db::rollback();
self::setError($e->getMessage());
return false;
}
}
/**
* @notes 删除文章
* @param array $params
* @return bool
* @author likeadmin
* @date 2024/02/05 16:36
*/
public static function delete(array $params): bool
{
return Article::destroy($params['id']);
}
/**
* @notes 获取文章详情
* @param $params
* @return array
* @author likeadmin
* @date 2024/02/05 16:36
*/
public static function detail($params): array
{
$detail = Article::with('detail')->findOrEmpty($params['id'])->toArray();
if ($detail) {
$arr = ArticleLabel::where('article_id', $params['id'])->column('label_id');
if ($arr) {
$detail['tag'] = Label::whereIn('id', $arr)->column('label_name');
}
}
return $detail;
}
}