Для вывода товаров с их категориями на одной странице в Laravel, можно использовать отношения между моделями и выполнить запрос с использованием метода with()
.
Предположим, у нас есть модели Product
и Category
, и между ними существует связь «один ко многим», где одна категория может иметь много товаров, а каждый товар относится только к одной категории.
1. Сначала, убедитесь, что у вас есть миграции для обеих моделей и примените их:
php artisan make:migration create_products_table --create=products php artisan make:migration create_categories_table --create=categories
2. Определите отношения в моделях. В модели Product
установите отношение belongsTo()
к модели Category
, а в модели Category
установите отношение hasMany()
к модели Product
:
// app/Models/Product.php namespace AppModels; use IlluminateDatabaseEloquentModel; class Product extends Model { public function category() { return $this->belongsTo(Category::class); } } // app/Models/Category.php namespace AppModels; use IlluminateDatabaseEloquentModel; class Category extends Model { public function products() { return $this->hasMany(Product::class); } }
3. Создайте маршрут и контроллер для отображения товаров с категориями. В маршрутах web.php
, добавьте следующий маршрут:
Route::get('/products', [ProductController::class, 'index']);
Создайте контроллер ProductController
с методом index()
для обработки запроса и отображения товаров с категориями:
// app/Http/Controllers/ProductController.php namespace AppHttpControllers; use AppModelsProduct; class ProductController extends Controller { public function index() { $products = Product::with('category')->get(); return view('products.index', compact('products')); } }
4. Создайте шаблон для отображения товаров с категориями. В директории resources/views
, создайте директорию products
и файл шаблона index.blade.php
:
<!-- resources/views/products/index.blade.php --> @extends('layout') @section('content') <h1>All Products</h1> <table> <thead> <tr> <th>Name</th> <th>Category</th> </tr> </thead> <tbody> @foreach ($products as $product) <tr> <td>{{ $product->name }}</td> <td>{{ $product->category->name }}</td> </tr> @endforeach </tbody> </table> @endsection
5. Наконец, создайте макет layout.blade.php
, который будет использоваться шаблоном index.blade.php
. В директории resources/views
, создайте файл layout.blade.php
:
<!-- resources/views/layout.blade.php --> <!DOCTYPE html> <html> <head> <title>@yield('title')</title> <style> table { border-collapse: collapse; } th, td { border: 1px solid black; padding: 8px; } </style> </head> <body> @yield('content') </body> </html>
Теперь, при переходе по /products
, вы будете видеть список товаров соответствующих их категориям.
Обратите внимание, что в данном примере используется Eloquent ORM и шаблонизатор Blade в Laravel. Можно настроить представление на свое усмотрение, добавить пагинацию и т. д.