Как создать динамический маршрут для нескольких категорий электронной коммерции в laravel?

#laravel #model-view-controller #eloquent #e-commerce #dynamic-variables

#laravel #model-view-controller #красноречивый #электронная коммерция #динамические переменные

Вопрос:

Я хочу:

  1. Создайте логику динамического маршрута для обработки категорий и подкатегорий в URL.
  2. Отправьте динамическую переменную в предложение where в модели Products

Web.php Файл маршрута:

 Route::prefix("products")->group(function () {
    Route::get('{category_one}/{category_two}',[ProductsController::class,'index'])->where(['category_one'=> '[A-Za-z] ','category_two'=>'[A-Za-z] ']);
});
 

ProductsController.php

 use AppModelsProducts;
public function index()
    {
        $products = new Products;
        $products=$products->getProducts();
        return view('pages.products')->with(['products'=>$products]);
    }
 

Products.php Модель

 use IlluminateSupportFacadesDB;
public function getProducts(){
        $products = DB::table('products')->where([['category_one', "{category_one}"],['category_two', "{category_two}"]])->latest()->get();
        return $products;
    }
 

У меня возникла проблема с динамическим извлечением {category_one} и {category_two} из URL.

ОШИБКА:

SQLSTATE[42S22]: столбец не найден: 1054 неизвестных столбца ‘category_two’ в предложении ‘where’ (SQL: выберите * из products where ( category_one = {category_one} и category_two = {category_two}) по порядку created_at desc)

Ответ №1:

Вы можете получить параметры маршрута из объекта запроса

 use AppModelsProducts;
use IlluminateHttpRequest;

public function index(Request $request)
{
    $categoryOne = $request->route('category_one');
    $categoryTwo = $request->route('category_two');

    $products = Products::where([
        ['category_one', $categoryOne], 
        ['category_two', $categoryTwo]
    ])->latest()->get();

    
    return view('pages.products',['products'=>$products]);
}