From 805731963a81d5fcec72295136dd8daea0cda32a Mon Sep 17 00:00:00 2001 From: cody <648753004@qq.com> Date: Thu, 22 Jan 2026 17:14:27 +0800 Subject: [PATCH] update --- app/Http/Controllers/Admin/UserController.php | 13 ++--- app/Models/Company.php | 51 +++++++++++++++++++ 2 files changed, 54 insertions(+), 10 deletions(-) diff --git a/app/Http/Controllers/Admin/UserController.php b/app/Http/Controllers/Admin/UserController.php index 1c6cd7e..1efdf1e 100755 --- a/app/Http/Controllers/Admin/UserController.php +++ b/app/Http/Controllers/Admin/UserController.php @@ -369,16 +369,9 @@ class UserController extends BaseController } // 所在区域:like 匹配关联 company 的 company_area,多个英文逗号分隔为 or if (isset($all['company_area']) && $all['company_area'] !== '') { - $company_area = array_filter(array_map('trim', explode(',', $all['company_area']))); - if (!empty($company_area)) { - $query->whereHas('company', function ($c) use ($company_area) { - $c->where(function ($q) use ($company_area) { - foreach ($company_area as $v) { - $q->orWhere('company_area', 'like', '%' . $v . '%'); - } - }); - }); - } + $query->whereHas('company', function ($c) use ($all) { + $c->filterByArea($all['company_area']); + }); } // 公司地址:模糊匹配关联 company 的 company_address 或 company_city if (isset($all['address']) && $all['address'] !== '') { diff --git a/app/Models/Company.php b/app/Models/Company.php index 28990b5..eb076ae 100644 --- a/app/Models/Company.php +++ b/app/Models/Company.php @@ -38,6 +38,57 @@ class Company extends SoftDeletesModel }); } + /** + * 根据区域名称筛选公司 + * 支持区域名称映射和特殊逻辑(如"苏州市外") + * @param \Illuminate\Database\Eloquent\Builder $query + * @param string|array $companyArea 区域名称,多个用英文逗号分隔或传入数组 + * @return \Illuminate\Database\Eloquent\Builder + */ + public function scopeFilterByArea($query, $companyArea) + { + if (empty($companyArea)) { + return $query; + } + + // 如果是字符串,转换为数组 + if (is_string($companyArea)) { + $company_area = array_filter(array_map('trim', explode(',', $companyArea))); + } else { + $company_area = array_filter(array_map('trim', (array) $companyArea)); + } + + if (empty($company_area)) { + return $query; + } + + // 区域名称映射:搜索参数 -> 数据库值 + $areaMapping = [ + '高新区' => '虎丘', + ]; + + // 检查是否包含"苏州市外" + $hasSuzhouOut = in_array('苏州市外', $company_area); + + if ($hasSuzhouOut) { + // 如果包含"苏州市外",查询所有不等于"苏州"的记录 + return $query->where('company_area', '!=', '苏州') + ->whereNotNull('company_area') + ->where('company_area', '!=', ''); + } else { + // 将搜索参数转换为数据库值 + $company_area = array_map(function ($v) use ($areaMapping) { + return isset($areaMapping[$v]) ? $areaMapping[$v] : $v; + }, $company_area); + + return $query->where(function ($q) use ($company_area) { + foreach ($company_area as $v) { + $q->orWhere('company_area', 'like', '%' . $v . '%'); + } + }); + } + } + /** * 地址转经纬度 */