我将旧的Symfony 2.7代码库升级到Symfony 4,并且我有一些Dao类不适合特定的类存储库。
例如:我有一个Dao,可以为我提供通用的数据库信息,例如计算每个表中的记录总数,而其他访问大多数访问数据库功能的数据库功能。
是否可以创建与特定类无关的存储库?如果不是,创建此代码的最“ Symfony 4”方法是什么?
我认为也许是在创建一个不是存储库的单独的Dao类,将EntityManager注入其中,然后将所有查询放在那儿。有更好的方法吗?
编辑:有人可以评论为什么这个问题没有得到回答吗?我在这里想念什么吗?我正在考虑在这笔钱到期后提高悬赏额,但是我不确定这样做,只是松散代表而没有任何答案。
答案 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);
}
}
似乎对我来说是合法的方法。