Есть ли способ создать общий репозиторий, не связанный с конкретным классом в Symfony 4? - PullRequest
2 голосов
/ 19 марта 2019

Я обновляю свою старую кодовую базу Symfony 2.7 до Symfony 4, и у меня есть некоторые классы Dao, которые не вписываются в репозиторий определенного класса.

Например: у меня есть Dao, который дает мне общийинформация о базе данных, такая как подсчет общего количества записей в каждой таблице и другие, которые обращаются в основном к функциям базы данных, которые выполняют несколько операций.

Есть ли способ создать репозиторий, не связанный с конкретным классом?Если нет, то каков самый «Symfony 4» способ создания этого?

Я подумал, может быть, при создании отдельного класса Dao, который не является хранилищем, вставьте в него EntityManager и поместите все запросы туда.Есть ли лучший способ сделать это?

РЕДАКТИРОВАТЬ : Кто-нибудь может прокомментировать, почему на этот вопрос нет ответа?Я что-то здесь упускаю?Я думаю о повышении награды после истечения этого срока, но я не уверен, что смогу сделать это и просто потеряю репутацию без ответа.

1 Ответ

0 голосов
/ 28 марта 2019

Если мое понимание верно, данные, которые вы хотите получить, не связаны с какой-либо конкретной сущностью, поэтому вам никогда не понадобятся такие функции репозитория, как 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);
    }
}

Кажется, законный подход ко мне.

...