147 lines
4.3 KiB
PHP
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;
|
|
}
|
|
}
|