From 59e662a3555d6b6e9b44418baddf0b782eecad0f Mon Sep 17 00:00:00 2001 From: cody <648753004@qq.com> Date: Thu, 15 Jan 2026 13:06:17 +0800 Subject: [PATCH] update --- .../Controllers/Admin/CompanyController.php | 57 ++++++++++++++----- 1 file changed, 43 insertions(+), 14 deletions(-) diff --git a/app/Http/Controllers/Admin/CompanyController.php b/app/Http/Controllers/Admin/CompanyController.php index 7f2cdec..f2418f4 100644 --- a/app/Http/Controllers/Admin/CompanyController.php +++ b/app/Http/Controllers/Admin/CompanyController.php @@ -226,13 +226,16 @@ class CompanyController extends BaseController } })->orderBy($all['sort_name'] ?? 'id', $all['sort_type'] ?? 'desc'); if (isset($all['is_export']) && !empty($all['is_export'])) { - $list = $list->get()->toArray(); - // 为每个公司添加"是否校友企业"字段(导出时) - $this->addIsSchoolmateCompanyField($list); + $list = $list->get(); + // 为每个公司添加"是否校友企业"字段(导出时,在模型对象上添加) + $this->addIsSchoolmateCompanyFieldToModels($list); + $list = $list->toArray(); return Excel::download(new CommonExport($list, $all['export_fields'] ?? ''), $all['file_name'] ?? '' . date('YmdHis') . '.xlsx'); } else { // 输出 $list = $list->paginate($all['page_size'] ?? 20); + // 为每个公司添加"是否校友企业"字段(在模型对象上添加) + $this->addIsSchoolmateCompanyFieldToModels($list->items()); } // 计算统计数据(如果提供了开始和结束年份) @@ -273,16 +276,6 @@ class CompanyController extends BaseController // 将统计数据添加到返回结果中 $result = $list->toArray(); - - // 为每个公司添加"是否校友企业"字段 - if (isset($result['data']) && is_array($result['data'])) { - // 分页数据,处理 data 数组 - $this->addIsSchoolmateCompanyField($result['data']); - } elseif (is_array($result) && !isset($result['data'])) { - // 如果不是分页数据,直接处理数组 - $this->addIsSchoolmateCompanyField($result); - } - $result['statistics'] = $statistics; return $this->success($result); } @@ -411,7 +404,43 @@ class CompanyController extends BaseController } /** - * 为公司数组添加"是否校友企业"字段 + * 为公司模型集合添加"是否校友企业"字段 + * @param array|\Illuminate\Support\Collection $companies 公司模型集合 + */ + private function addIsSchoolmateCompanyFieldToModels($companies) + { + foreach ($companies as $company) { + if (!is_object($company)) { + continue; + } + $isSchoolmateCompany = 0; + // 获取关联的 users(确保关联已加载) + if ($company->relationLoaded('users')) { + $users = $company->users; + if ($users && (is_array($users) || $users instanceof \Illuminate\Support\Collection)) { + // 检查该企业下的用户中是否有校友(is_schoolmate = 1) + foreach ($users as $user) { + $isSchoolmate = is_object($user) ? ($user->is_schoolmate ?? 0) : ($user['is_schoolmate'] ?? 0); + if ($isSchoolmate == 1) { + $isSchoolmateCompany = 1; + break; + } + } + } + } else { + // 如果关联未加载,尝试直接查询 + $hasSchoolmate = \App\Models\User::where('company_id', $company->id) + ->where('is_schoolmate', 1) + ->exists(); + $isSchoolmateCompany = $hasSchoolmate ? 1 : 0; + } + // 使用 setAttribute 确保属性被正确设置 + $company->setAttribute('is_schoolmate_company', $isSchoolmateCompany); + } + } + + /** + * 为公司数组添加"是否校友企业"字段(用于数组数据) * @param array $companies 公司数组(引用传递) */ private function addIsSchoolmateCompanyField(&$companies)