From e7734f2551fd70c3a76aca3c4a9fe9d20944edf9 Mon Sep 17 00:00:00 2001 From: mengwb Date: Mon, 17 Apr 2023 01:16:58 +0000 Subject: [PATCH] =?UTF-8?q?!82=20=E5=95=86=E5=93=81=E6=90=9C=E7=B4=A2?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E4=BB=A5=E7=A9=BA=E6=A0=BC=E9=97=B4=E9=9A=94?= =?UTF-8?q?=E7=9A=84=E5=A4=9A=E4=B8=AA=E8=AF=8D=E7=BB=84=20*=20The=20produ?= =?UTF-8?q?ct=20search=20supports=20multiple=20strings=20separated=20by=20?= =?UTF-8?q?spaces.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- beike/Repositories/ProductRepo.php | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/beike/Repositories/ProductRepo.php b/beike/Repositories/ProductRepo.php index 5c3fe08a..8cf4feb2 100644 --- a/beike/Repositories/ProductRepo.php +++ b/beike/Repositories/ProductRepo.php @@ -153,13 +153,25 @@ class ProductRepo $builder->where('pd.name', 'like', "%{$data['name']}%"); } - $keyword = $data['keyword'] ?? ''; + $keyword = trim($data['keyword'] ?? ''); if ($keyword) { - $builder->where(function (Builder $query) use ($keyword) { - $query->whereHas('skus', function (Builder $query) use ($keyword) { - $query->where('sku', 'like', "%{$keyword}%") - ->orWhere('model', 'like', "%{$keyword}%"); - })->orWhere('pd.name', 'like', "%{$keyword}%"); + $keywords = explode(' ', $keyword); + $keywords = array_unique($keywords); + $keywords = array_diff($keywords, ['']); + $builder->where(function (Builder $query) use ($keywords) { + $query->whereHas('skus', function (Builder $query) use ($keywords) { + $keywordFirst = array_shift($keywords); + $query->where('sku', 'like', "%{$keywordFirst}%") + ->orWhere('model', 'like', "%{$keywordFirst}%"); + + foreach ($keywords as $keyword) { + $query->orWhere('sku', 'like', "%{$keyword}%") + ->orWhere('model', 'like', "%{$keyword}%"); + } + }); + foreach ($keywords as $keyword) { + $query->orWhere('pd.name', 'like', "%{$keyword}%"); + } }); }