1
0
Fork 0
party-rank-server/app/Admin/Services/KeywordService.php

87 lines
2.3 KiB
PHP

<?php
namespace App\Admin\Services;
use App\ModelFilters\KeywordFilter;
use App\Models\Keyword;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
/**
* @method Keyword getModel()
* @method Keyword|\Illuminate\Database\Query\Builder query()
*/
class KeywordService extends BaseService
{
protected array $withRelationships = [];
protected string $modelName = Keyword::class;
protected string $modelFilterName = KeywordFilter::class;
public function getTree($filters = [])
{
$list = $this->query()->filter($filters, $this->getModelFilter())->sort()->get();
return array2tree($list->toArray(), $list->min('parent_id') ?: 0);
}
public function list()
{
return ['items' => $this->getTree(request()->all())];
}
/**
* 删除的前置方法
*
* @param array $ids 主键id
* @return mixed true: 继续后续操作, string: 中断操作, 返回错误提示
*/
public function preDelete(array $ids)
{
// 删除子级
$this->query()->where(function ($q) use ($ids) {
foreach ($ids as $id) {
$q->orWhere('path', 'like', '%-'.$id.'-%');
}
})->delete();
return true;
}
public function validate($data, $model = null)
{
$createRules = [
'key' => ['required', Rule::unique('keywords', 'key')],
'name' => ['required'],
];
$updateRules = [
'key' => [Rule::unique('keywords', 'key')->ignore($model?->id)]
];
$validator = Validator::make($data, $model ? $updateRules : $createRules, [
'key.unique' => ':input 已经存在'
]);
if ($validator->fails()) {
return $validator->errors()->first();
}
return true;
}
public function resloveData($data, $model = null)
{
$parent_id = data_get($data, 'parent_id');
if (!is_null($parent_id)) {
if ($parent_id) {
$parent = Keyword::findOrFail($parent_id);
$data['level'] = $parent->level + 1;
$data['path'] = $parent->path.$parent_id.'-';
} else {
$data['level'] = 1;
$data['path'] = '-';
$data['parent_id'] = 0;
}
}
return $data;
}
}