Symfony 7.1中如何获取第二个数据库的DBAL连接?
获取Symfony中第二个数据库连接的方法
你已经正确配置了两个数据库连接,要获取名为blog的第二个数据库连接,有两种常用方式:
方法一:直接注入指定连接
利用Symfony的依赖注入,通过#[Autowire]注解指定对应连接的服务ID。每个Doctrine数据库连接的服务ID格式为doctrine.dbal.【连接名】_connection,这里你的第二个连接名为blog,所以服务ID是doctrine.dbal.blog_connection。
代码示例:
use Doctrine\DBAL\Connection; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\DependencyInjection\Attribute\Autowire; public function blogSummary( #[Autowire(service: 'doctrine.dbal.blog_connection')] Connection $blogConnection ): JsonResponse { $sql = 'select count(ID) post_count from wp_posts where post_type = "post"'; $result = $blogConnection->fetchAssociative($sql); return new JsonResponse([ 'post_count' => $result['post_count'] ]); }
方法二:通过ConnectionRegistry获取
如果需要动态切换连接,或者在非控制器类中获取连接,可以注入ConnectionRegistry,然后通过连接名获取对应实例:
代码示例:
use Doctrine\Persistence\ConnectionRegistry; use Symfony\Component\HttpFoundation\JsonResponse; public function blogSummary(ConnectionRegistry $connectionRegistry): JsonResponse { // 根据连接名获取连接 $blogConnection = $connectionRegistry->getConnection('blog'); $sql = 'select count(ID) post_count from wp_posts where post_type = "post"'; $result = $blogConnection->fetchAssociative($sql); return new JsonResponse([ 'post_count' => $result['post_count'] ]); }
两种方法都能直接拿到blog数据库的连接,之后就可以像操作默认连接一样执行原生SQL查询了。
内容的提问来源于stack exchange,提问作者TaylorR
相关产品推荐
相关产品推荐

