Как отсортировать товар только из выбранной категории?

Для сортировки товаров только из выбранной категории в 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

В результате будут отображены товары только из выбранной категории, отсортированные по имени.