Я пытаюсь изучить шаблон репозитория и, похоже, немного запутался в том, как я могу использовать этот шаблон репозитория при активном взаимодействии загрузки и вывести логику db из моего контроллера.
Краткий обзор моей структуры репозитория/приложения.
app/
Acme/
Repositories/
RepositoryServiceProvider.php
Product/
EloquentProduct.php
ProductInterface.php
Category/
EloquentCategory.php
CategoryInterface.php
Пример ProductInterface.php
<?php namespace GD\Repositories\Product;
interface ProductInterface
{
public function all();
public function find($id);
public function findBySlug($slug);
}
Пример CategoryInterface.php
<?php namespace GD\Repositories\Category;
interface CategoryInterface
{
public function all();
public function find($id);
public function findBySlug($slug);
}
Хорошо, поэтому простая часть использует DI для ввода зависимостей модели в контроллер.
перечисление всех категорий с связанными продуктами сложнее, поскольку я больше не работаю с красноречивой моделью. Я работаю с интерфейсом, который не выявил всех красноречивых методов.
Это не сработает без внедрения метода с в моем классе EloquentCategory...
public function show($slug)
{
return Response::json($this->category->findBySlug($slug)->with('products'), 200);
}
Должен ли я создать отдельный класс службы для склеивания двух репозиториев? например позволяя следующее
public function __construct(ShopService $shop)
{
$this->shop = $shop;
}
public function show($slug)
{
return Response::json( $this->shop->getProductsInCategory($slug), 200 );
}
Или, альтернативно, должен ли я реализовывать метод with в моем репозитории категорий?
public function with($relation)
{
return Category::with($relation);
}
Наконец, я понимаю, как правильно использовать шаблон репозитория?