selectField = [ 'id', 'user_id', 'title', 'cover', 'description', 'video_url', 'author_id', 'price', 'preferential_price', 'front', 'service', 'deploy', 'status', 'created_at', 'updated_at', 'deleted_at', ]; $this->model = ProjectModel::class; } /** * 获取项目列表 * @return array * @throws ContainerExceptionInterface * @throws NotFoundExceptionInterface */ public function list(): array { $this->with = [ 'frameworks:id,name', 'labels:id,name', // 'features:id,project_id,name' ]; return $this->getPageList(); } public function detail($id) { $this->with = [ 'frameworks:id,name', 'labels:id,name', 'features:id,project_id,name' ]; return $this->getDetail($id); } /** * 项目下拉列表 * @return mixed */ public function option() { $this->optionField = ['id', 'title']; return $this->getOption(); } /** * 创建项目 * @param $params * @return mixed * @throws Exception */ public function create($params): mixed { $params['user_id'] = $this->userId; $params['author_id'] = $params['author_id']?? $this->userId; // TODO 项目 $screenshots = $params['screenshots']; $labels = $params['tags']; $features = $params['features']; unset($params['screenshots'], $params['tags'], $params['features']); DB::beginTransaction(); try { $insertProjectModel = $this->insert($params); $labelInsertData = []; foreach ($labels as $label) { $labelInsertData[] = [ 'project_id' => $insertProjectModel, 'label_id' => $label, 'created_at' => get_time() ]; } $insertLabelModel = ProjectLabelRelationModel::insert($labelInsertData); if (!$insertLabelModel) { $this->utils->errorThrow('标签添加失败'); } $featureInsertData = []; foreach ($features as $feature) { $featureInsertData[] = [ 'project_id' => $insertProjectModel, 'name' => $feature, 'created_at' => get_time() ]; } $insertFeatureModel = FeatureModel::insert($featureInsertData); if (!$insertFeatureModel) { $this->utils->errorThrow('项目功能添加失败'); } $screenInsertData = []; foreach ($screenshots as $screenshot) { $screenInsertData[] = [ 'project_id' => $insertProjectModel, 'url' => $screenshot, 'created_at' => get_time() ]; } $insertScreenModel = ScreenshotModel::insert($screenInsertData); if (!$insertScreenModel) { $this->utils->errorThrow('项目截图添加失败'); } DB::commit(); } catch (Exception $e) { DB::rollBack(); ds([ 'message' => $e->getMessage(), 'line' => $e->getLine(), 'file' => $e->getFile(), 'code' => $e->getCode(), ]); $this->utils->errorThrow($e->getMessage()); } return $insertProjectModel; } /** * 编辑项目 * @param $id * @param $params * @return mixed * @throws Exception */ public function update($id, $params): mixed { return $this->save($id, $params); } /** * 删除项目 * @param $ids * @return mixed|true * @throws Exception */ public function delete($ids): mixed { return $this->del($ids); } }