whereLike('title', "%{$params['title']}%"); isset($params['status']) && filled($params['status']) && $project->where('status', $params['status']); !empty($params['createTime']) && $project->whereIn('created_at', $params['createTime']); $projectPage = $project->select([...$this->simpleColumn, ...$this->selectColumn, ...$this->appendColumn])->selectRaw($this->selectRawColumn)->paginate($params['pageSize'], ['*'], 'page', $params['pageNo']); return ['list' => $projectPage->items(), 'total' => $projectPage->total()]; } /** * @throws ApiException */ public function createProject(array $data) { $collection = collect($data); $collection->forget('category'); DB::beginTransaction(); try { // 保存服务项目 $project = self::toModel($collection, Project::class); self::initProperty($project); $project = $project->create($project->getAttributes()); // 关联服务项目所属分类 !empty($data['category']) && $project->saveCategory($data['category']); DB::commit(); return $project->id; } catch (Exception) { DB::rollBack(); self::error('操作失败'); } } public function getProject(int $id) { $project = Project::query()->select([...$this->simpleColumn, ...$this->selectColumn, ...$this->selectDetailColumn])->selectRaw($this->selectRawColumn)->find($id); $project->category = $project->getCategory(); return $project; } public function updateProject(array $data, int $id): void { $collection = collect($data); $collection->forget('category'); DB::beginTransaction(); try { // 保存服务项目 $project = self::toModel([...$collection, 'id' => $id], Project::class); self::initProperty($project); $project->update($project->getAttributes()); // 清空服务项目所属分类 $project->deleteCategory(); // 关联服务项目所属分类 !empty($data['category']) && $project->saveCategory($data['category']); DB::commit(); } catch (Exception) { DB::rollBack(); self::error('操作失败'); } } public function deleteProject(int $id) { $project = self::toModel(['id' => $id], Project::class); // 清空服务项目所属分类 $project->deleteCategory(); return $project->delete(); } protected static function initProperty(Project &$project): void { $project['price'] *= 100; $project['init_price'] *= 100; $project['material_price'] *= 100; $project['total_sale'] = (int)($project['sale'] ?? 0 + $project['true_sale'] ?? 0); $project['introduce'] = $project['introduce'] ?? ''; $project['explain'] = $project['explain'] ?? ''; $project['notice'] = $project['notice'] ?? ''; } }