Для сортировки товаров только из выбранной категории в Laravel вы можете использовать функции, предоставляемые Eloquent ORM. Ниже приведен подробный ответ, объясняющий шаги, которые вам нужно выполнить.
1. Определите отношение между вашими моделями товарами (например, "Product") и категориями (например, "Category"). В модели товаров, вы можете определить отношение "belongsTo" к модели категорий. Например:
namespace AppModels; use IlluminateDatabaseEloquentModel; class Product extends Model { public function category() { return $this->belongsTo(Category::class); } }
2. Определите отношение "hasMany" в модели категорий. Например:
namespace AppModels; use IlluminateDatabaseEloquentModel; class Category extends Model { public function products() { return $this->hasMany(Product::class); } }
3. В вашем контроллере добавьте метод, который будет получать выбранную категорию и возвращать отсортированные товары из этой категории. Например:
use AppModelsCategory; use AppModelsProduct; public function getProductsByCategory($categoryId) { $category = Category::findOrFail($categoryId); $products = $category->products()->orderBy('name')->get(); return view('products.index', compact('products')); }
4. Создайте маршрут, который будет указывать на этот метод контроллера. Например:
Route::get('/category/{categoryId}/products', [ProductController::class, 'getProductsByCategory']);
5. Создайте представление (view), который будет отображать товары. Пройдитесь по массиву товаров и отобразите их. Например:
@foreach($products as $product) <div> <h3>{{ $product->name }}</h3> <p>{{ $product->description }}</p> </div> @endforeach
6. Теперь вы можете получить отсортированные товары для выбранной категории, обратившись к URL-адресу, содержащему идентификатор выбранной категории. Например:
/category/1/products
В результате будут отображены товары только из выбранной категории, отсортированные по имени.