В моем приложении Symfony продукты хранятся в таблице products
. Для этого есть сущность Product
и репозиторий ProductRepository
.
Некоторые продукты автоматически архивируются и сохраняются в другой таблице, которая называется products_archived
. Я создал Entity ProductArchived
и продублировал файл ProductRepository в файл ProductArchivedRepository.php.
Таблицы products и products_archived имеют одинаковую структуру и поля.
Моя цель: когда в коде продукт идентифицируется как архивированный продукт, я хочубыть в состоянии применить функцию из ProductRepository и НЕ нужно ссылаться на отдельный ProductArchivedRepository. Я хочу избежать использования дублированного кода.
Пример:
ProductRepository.php:
public function getProductDataById($productId)
{
$qb = $this->createQueryBuilder('p');
// ...
return $qb->getQuery()->getArrayResult();
}
ProductArchivedRepository.php:
public function getProductDataById($productId)
{
$qb = $this->createQueryBuilder('p');
// ...
return $qb->getQuery()->getArrayResult();
}
ProductService.php:
public function getProductDataById($productId)
{
$repoProduct = $this->productRepository;
$repoProductArchived = $this->container->productArchivedRepository;
if ($repoProduct->findOneBy(['id' => $productId]) instanceof Product) {
$repoP = $repoProduct;
} else if ($repoProductArchived->findOneBy(['id' => $productId]) instanceof ProductArchived) {
$repoP = $repoProductArchived;
} else {
throw new NotFoundHttpException(
'Product neither found in table product nor in table product_archived.'
);
}
$productData = $repoP->getProductDataById($productId);
return $productData;
}
Как добиться, чтобы ProductArchivedRepository.php стал избыточным?