diff --git a/beike/Repositories/CategoryRepo.php b/beike/Repositories/CategoryRepo.php index 173bde24..b1343789 100644 --- a/beike/Repositories/CategoryRepo.php +++ b/beike/Repositories/CategoryRepo.php @@ -60,5 +60,24 @@ class CategoryRepo { } + + + public static function autocomplete($name) + { + $categories = Category::query()->with('description') + ->whereHas('description', function ($query) use ($name) { + $query->where('name', 'like', "{$name}%"); + })->limit(10)->get(); + $results = []; + foreach ($categories as $category) { + $results[] = [ + 'id' => $category->id, + 'name' => $category->description->name, + 'image' => $category->image, + ]; + } + return $results; + } + } diff --git a/beike/Repositories/ProductRepo.php b/beike/Repositories/ProductRepo.php index 94b3b95c..3240a819 100644 --- a/beike/Repositories/ProductRepo.php +++ b/beike/Repositories/ProductRepo.php @@ -91,4 +91,21 @@ class ProductRepo { return self::getBuilder($data)->paginate($data['per_page'] ?? 20); } + + public static function autocomplete($name) + { + $products = Product::query()->with('description') + ->whereHas('description', function ($query) use ($name) { + $query->where('name', 'like', "{$name}%"); + })->limit(10)->get(); + $results = []; + foreach ($products as $product) { + $results[] = [ + 'id' => $product->id, + 'name' => $product->description->name, + 'image' => $product->image, + ]; + } + return $results; + } } diff --git a/beike/Shop/Http/Controllers/CategoryController.php b/beike/Shop/Http/Controllers/CategoryController.php index 3bb0bce6..916b9b72 100644 --- a/beike/Shop/Http/Controllers/CategoryController.php +++ b/beike/Shop/Http/Controllers/CategoryController.php @@ -26,4 +26,11 @@ class CategoryController extends Controller return view('category', $data); } + + public function autocomplete(Request $request) + { + $categories = CategoryRepo::autocomplete($request->get('name') ?? ''); + + return json_success('获取成功!', $categories); + } } diff --git a/beike/Shop/Http/Controllers/ProductController.php b/beike/Shop/Http/Controllers/ProductController.php index 555b5d1a..7f4d501a 100644 --- a/beike/Shop/Http/Controllers/ProductController.php +++ b/beike/Shop/Http/Controllers/ProductController.php @@ -18,4 +18,11 @@ class ProductController extends Controller return view('product', $data); } + + public function autocomplete(Request $request) + { + $products = ProductRepo::autocomplete($request->get('name') ?? ''); + + return json_success('获取成功!', $products); + } } diff --git a/beike/Shop/Routes/shop.php b/beike/Shop/Routes/shop.php index 251f32eb..2965dad8 100644 --- a/beike/Shop/Routes/shop.php +++ b/beike/Shop/Routes/shop.php @@ -31,11 +31,14 @@ Route::prefix('/') Route::post('carts/select', [CartController::class, 'select'])->name('carts.select'); Route::delete('carts/{cart}', [CartController::class, 'destroy'])->name('carts.destroy'); + Route::get('categories/autocomplete', [CategoryController::class, 'autocomplete'])->name('categories.autocomplete'); Route::get('categories', [CategoryController::class, 'index'])->name('categories.index'); Route::get('categories/{category}', [CategoryController::class, 'show'])->name('categories.show'); + Route::get('products/autocomplete', [ProductController::class, 'autocomplete'])->name('products.autocomplete'); Route::get('products/{product}', [ProductController::class, 'show'])->name('products.show'); + Route::get('login', [LoginController::class, 'index'])->name('login.index'); Route::post('login', [LoginController::class, 'store'])->name('login.store'); Route::get('register', [RegisterController::class, 'index'])->name('register.index');