where('name', 'like', '%' . $data['name'] . '%'); } if (isset($data['status']) && $data['status'] != '') { $model = $model->where('is_show', $data['status']); } if(!empty($data['category'])){ $category = $data['category']; unset($data['category']); $project_ids = ProjectCategory::query()->where('category_id',$category)->pluck('project_id')->toArray(); $model->whereIn('id', $project_ids); } $list = $model->with('category') ->oldest('list_order') ->paginate($data['pageSize']) ->toArray(); $previewUrl = 'https://dd.niusenyun.com' . DIRECTORY_SEPARATOR . 'upload'; foreach ($list['data'] as $key => $item) { if (!str_starts_with($item['icon'], "http") && !str_starts_with($item['icon'], "/")) { $list['data'][$key]['icon'] = $previewUrl . DIRECTORY_SEPARATOR . $item['icon']; } } return $this->apiSuccess('', [ 'list' => $list['data'], 'total' => $list['total'] ]); } public function regionTree($id) { $service_ids = ProjectServiceRelevancy::query()->where('project_id', $id)->pluck('service_id')->toArray(); $city_ids = Region::query()->where('depth', 3)->whereIn('id', $service_ids)->pluck('parentId')->toArray(); $model = Region::query(); $model->where('depth', 1); $model->with([ 'children' => function ($query) use ($city_ids) { $query->whereIn('id', $city_ids); }, 'children.children' => function ($query) use ($service_ids) { $query->whereIn('id', $service_ids); }, 'children.children.service' => function ($query) use ($id) { $query->where('project_id', $id); }]); $model->whereHas('children.children', function ($query) use ($service_ids) { $query->whereIn('id', $service_ids); }); $data = $model->get()->toArray(); return $this->apiSuccess('', $data); } public function region($id) { $data = ProjectServiceRelevancy::query()->where('project_id', $id)->pluck('service_id')->toArray(); return $this->apiSuccess('', $data); } public function regionStore(array $data) { $project = Project::find($data['id']); $relevancyData = []; foreach ($data['region_ids'] as $region_id) { $relevancyData[] = [ 'project_id' => $data['id'], 'service_id' => $region_id, 'minute' => $project['minute'], 'price' => $project['price'], 'order_price' => $project['order_price'] ]; } return $this->commonCreate(ProjectServiceRelevancy::query(), $relevancyData, '', '', false); } public function regionDestroy($data) { try { $model = ProjectServiceRelevancy::query(); $model->where($data); return $this->commonDestroy($model, [$data['id']]); } catch (ApiException $e) { return $e; } } public function regionUpdate($data) { return $this->commonUpdate(ProjectServiceRelevancy::query(), $data['id'], $data); } public function store($data, $category) { DB::beginTransaction(); try { $res = Project::query()->create($data)->toArray(); $categoryRelevancyData = []; foreach ($category as $item) { $categoryRelevancyData[] = [ 'project_id' => $res['id'], 'category_id' => $item ]; } $this->commonCreate(ProjectCategory::query(), $categoryRelevancyData, '', '', false); DB::commit(); } catch (\Exception $e) { DB::rollback(); $this->apiError(); } return $this->apiSuccess(); } public function detail($id) { $data = Project::query()->with('category')->find($id)->toArray(); $previewUrl = 'https://dd.niusenyun.com' . DIRECTORY_SEPARATOR . 'upload'; if (!str_starts_with($data['icon'], "http") && !str_starts_with($data['icon'], "/")) { $data['icon'] = $previewUrl . DIRECTORY_SEPARATOR . $data['icon']; } foreach ($data['banner'] as $key => $item) { if (!str_starts_with($item['url'], "http") && !str_starts_with($item['url'], "/")) { $data['banner'][$key]['url'] = $previewUrl . DIRECTORY_SEPARATOR . $item['url']; } } return $this->apiSuccess('', $data); } public function update(array $data, $category) { try { DB::beginTransaction(); $this->commonUpdate(Project::query(), $data['id'], $data); $categoryRelevancyData = []; foreach ($category as $item) { $categoryRelevancyData[] = [ 'project_id' => $data['id'], 'category_id' => $item ]; } ProjectCategory::query()->where('project_id', $data['id'])->forceDelete(); $this->commonCreate(ProjectCategory::query(), $categoryRelevancyData, '', '', false); DB::commit(); } catch (\Exception $e) { DB::rollback(); $this->apiError(); } return $this->apiSuccess(); } public function status($data) { try { if (Project::query()->where('id', $data['id'])->update($data)) { return $this->apiSuccess(Message::UPDATE_API_SUCCESS); } $this->apiError(Message::UPDATE_API_ERROR); } catch (ApiException $e) { return $e; } } public function destroy(array $ids) { return $this->commonIsDelete(Project::query(), $ids); } }