Я обновляю свою старую кодовую базу Symfony 2.7 до Symfony 4, и у меня есть несколько классов Dao, которые не помещаются в определенный репозиторий классов.
Например: у меня есть Dao, который дает мне общую информацию о базе данных, такую как подсчет общего количества записей в каждой таблице, и другие, которые обращаются в основном к функциям базы данных, которые выполняют несколько операций.
Есть ли способ создать репозиторий, не относящийся к определенному классу? Если нет, то какой самый "Symfony 4" способ создать это?
Я подумал, может быть, при создании отдельного класса Dao, который не является репозиторием, внедрить в него EntityManager и поместить туда все запросы. Есть ли лучший способ сделать это?
РЕДАКТИРОВАТЬ: Кто-нибудь может прокомментировать, почему на этот вопрос нет ответа? Я что-то упустил здесь? Я думаю о повышении награды после истечения срока действия этого, но я не уверен, что сделаю это, и просто потеряю репутацию без ответа.





Если я правильно понимаю, данные, которые вы хотите получить, не связаны с каким-либо конкретным объектом, поэтому вам никогда не понадобятся функции репозитория, такие как findBy, и вам не нужно будет гидратировать какой-либо объект, и вы, вероятно, будете Также не нужно использовать какой-либо DQL.
Итак, ваше предложение кажется мне правильным: внедрить диспетчер сущностей внутри класса, который вы могли бы вызвать для примера DatabaseMetadataRepository, даже если он не расширяет ServiceEntityRepository. Затем просто поместите свои запросы, при необходимости, с собственными запросами:
class DatabaseMetadataRepository
{
private $entityManager;
public function __construct(EntityManagerInterface $entityManager)
{
$this->entityManager = $entityManager;
}
public function loadMetadata($someParameter) {
$conn = $this->getEntityManager()->getConnection();
$sql = "
SELECT whatever
FROM whatever_table t
WHERE my_column = :someParameter
";
$stmt = $conn->prepare($sql);
$stmt->execute(array('someParameter' => $someParameter));
return $stmt->fetchAll(\Doctrine\DBAL\FetchMode::COLUMN);
}
}
Мне кажется законный подход.