Реализация вашего ProductRepository
ожидает Product
в качестве параметра конструктора. Репозиторий не должен этого делать. Вместо этого, если хранилище должно обрабатывать модель продукта, оно должно быть передано в качестве параметра функции.
Например, это:
/**
* @param Brand $brand
*/
public function saveBrand(Brand $brand)
{
$this->model->brand()->associate($brand);
}
Может быть переписано в:
/**
* @param Product $product
* @param Brand $brand
*/
public function saveBrand(Product $product, Brand $brand)
{
$product->brand()->associate($brand);
}
Если вы удалите параметр Product
из конструктора, то вы можете использовать хранилище, не создавая его каждый раз, используя ключевое слово new
:
class BrandController extends Controller {
public function __construct(ProductRepositoryInterface $repository) {
$this->repository = $repository;
}
public function linkBrandToProduct(Request $request): void {
$product = $this->repository->findProductById($request->productId);
$brand = $this->repository->findBrandById($request->brandId);
$this->repository->saveBrand($product, $brand);
}
}