master
cody 2 months ago
parent fe565ad77a
commit 805731963a

@ -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'] !== '') {

@ -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 . '%');
}
});
}
}
/**
* 地址转经纬度
*/

Loading…
Cancel
Save