From a6bc59e47a37f6aaf3eed996c74b7205253bbc1b Mon Sep 17 00:00:00 2001 From: zeyan <258785420@qq.com> Date: Wed, 15 Oct 2025 11:30:46 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=20bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/apiService/ResourceSharingService.php | 26 ++++++++++++++++--- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/niucloud/app/service/api/apiService/ResourceSharingService.php b/niucloud/app/service/api/apiService/ResourceSharingService.php index f2842d81..9d8091a2 100644 --- a/niucloud/app/service/api/apiService/ResourceSharingService.php +++ b/niucloud/app/service/api/apiService/ResourceSharingService.php @@ -348,9 +348,18 @@ class ResourceSharingService extends BaseApiService $resource_conditions[] = ['source_channel', 'like', '%' . $where['source_channel'] . '%']; } - // 年龄查询 - varchar类型使用like查询,支持模糊匹配(如4可匹配4.1、4.12、14、24等) + // 年龄查询 - 改进的模糊匹配,减少错误匹配(如4匹配4, 4.1, 4.12等,尽量减少5.4这种情况) if (isset($where['age']) && $where['age'] !== '' && $where['age'] !== null) { - $resource_conditions[] = ['age', 'like', '%' . trim($where['age']) . '%']; + $searchAge = trim($where['age']); + // 使用更精确的匹配条件:精确匹配、小数点开头、或者作为独立数字被分隔符包围 + $resource_conditions[] = function($query) use ($searchAge) { + $query->where('age', '=', $searchAge) + ->whereOr('age', 'like', $searchAge . '.%') + ->whereOr('age', 'like', '% ' . $searchAge . ' %') + ->whereOr('age', 'like', '%,' . $searchAge . ',%') + ->whereOr('age', 'like', $searchAge . ',%') + ->whereOr('age', 'like', '%,' . $searchAge); + }; } // 黑名单状态查询 @@ -992,9 +1001,18 @@ class ResourceSharingService extends BaseApiService $resource_conditions[] = ['source_channel', 'like', '%' . $where['source_channel'] . '%']; } - // 年龄查询 - varchar类型使用like查询,支持模糊匹配(如4可匹配4.1、4.12、14、24等) + // 年龄查询 - 改进的模糊匹配,减少错误匹配(如4匹配4, 4.1, 4.12等,尽量减少5.4这种情况) if (isset($where['age']) && $where['age'] !== '' && $where['age'] !== null) { - $resource_conditions[] = ['age', 'like', '%' . trim($where['age']) . '%']; + $searchAge = trim($where['age']); + // 使用更精确的匹配条件:精确匹配、小数点开头、或者作为独立数字被分隔符包围 + $resource_conditions[] = function($query) use ($searchAge) { + $query->where('age', '=', $searchAge) + ->whereOr('age', 'like', $searchAge . '.%') + ->whereOr('age', 'like', '% ' . $searchAge . ' %') + ->whereOr('age', 'like', '%,' . $searchAge . ',%') + ->whereOr('age', 'like', $searchAge . ',%') + ->whereOr('age', 'like', '%,' . $searchAge); + }; } // 黑名单状态查询