query(); if (! empty($params['keyword'])) { $query->where(function ($q) use ($params) { $q->where('code', 'like', "%{$params['keyword']}%") ->orWhere('name', 'like', "%{$params['keyword']}%"); }); } if (! empty($params['group_id'])) { $query->where('group_id', $params['group_id']); } return $query->orderBy('sort')->get(); } catch (\Exception $e) { Log::error('获取设置项列表失败', ['error' => $e->getMessage(), 'params' => $params]); throw $e; } } /** * 创建设置项 * * @return mixed */ public function createItem(array $data) { try { return DB::transaction(function () use ($data) { // 检查code是否已存在 abort_if( $this->query()->where('code', $data['code'])->exists(), 422, '设置项代码已存在' ); return $this->getModel()::create($data); }); } catch (\Exception $e) { Log::error('创建设置项失败', ['error' => $e->getMessage(), 'data' => $data]); throw $e; } } /** * 更新设置项 * * @param int $id * @return mixed */ public function updateItem($id, array $data) { try { return DB::transaction(function () use ($id, $data) { $item = $this->query()->findOrFail($id); // 检查code是否已存在(排除自身) abort_if( $this->query()->where('code', $data['code'])->where('id', '!=', $id)->exists(), 422, '设置项代码已存在' ); return $item->update($data); }); } catch (\Exception $e) { Log::error('更新设置项失败', ['error' => $e->getMessage(), 'id' => $id, 'data' => $data]); throw $e; } } /** * 删除设置项 * * @param int $id * @return mixed */ public function deleteItem($id) { try { return DB::transaction(function () use ($id) { return $this->query()->findOrFail($id)->delete(); }); } catch (\Exception $e) { Log::error('删除设置项失败', ['error' => $e->getMessage(), 'id' => $id]); throw $e; } } /** * 获取设置项详情 * * @param string $id_or_code ID或代码 * @return mixed */ public function getItemDetail($id_or_code) { try { $query = $this->query(); // 判断是否为数字ID if (is_numeric($id_or_code)) { $item = $query->find($id_or_code); } else { // 通过code查询 $item = $query->where('code', $id_or_code)->first(); } // 如果未找到记录则抛出异常 abort_if(! $item, 404, '设置项不存在'); return $item; } catch (\Exception $e) { Log::error('获取设置项详情失败', [ 'error' => $e->getMessage(), 'id_or_code' => $id_or_code, ]); throw $e; } } }