有没有办法创建与Symfony 4中的特定类无关的通用存储库?

时间:2019-03-18 22:36:17

标签: doctrine symfony4

我将旧的Symfony 2.7代码库升级到Symfony 4,并且我有一些Dao类不适合特定的类存储库。

例如:我有一个Dao,可以为我提供通用的数据库信息,例如计算每个表中的记录总数,而其他访问大多数访问数据库功能的数据库功能。

是否可以创建与特定类无关的存储库?如果不是,创建此代码的最“ Symfony 4”方法是什么?

我认为也许是在创建一个不是存储库的单独的Dao类,将EntityManager注入其中,然后将所有查询放在那儿。有更好的方法吗?

编辑:有人可以评论为什么这个问题没有得到回答吗?我在这里想念什么吗?我正在考虑在这笔钱到期后提高悬赏额,但是我不确定这样做,只是松散代表而没有任何答案。

1 个答案:

答案 0 :(得分:0)

如果我的理解是正确的,那么您要检索的数据与任何特定实体都不相关,因此您将永远不需要诸如findBy之类的存储库功能,也不需要合并任何实体,并且您也许也不需要使用任何DQL。

所以您的建议对我来说似乎是正确的:将实体管理器注入类中,即使您不扩展ServiceEntityRepository,也可以调用DatabaseMetadataRepository进行检查。然后只需提出您的请求,并在必要时添加本机查询:

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);
    }
}

似乎对我来说是合法的方法。